Source code for quackamollie.model_manager.langchain.helpers.langchain_model_entry_point
# -*- coding: utf-8 -*-
__all__ = ["get_langchain_models_from_entrypoints"]
__author__ = "QuacktorAI"
__copyright__ = "Copyright 2024, Forge of Absurd Ducks"
__credits__ = ["QuacktorAI"]
from importlib.metadata import entry_points
from typing import Dict, Type
from quackamollie.model.meta.langchain.langchain_meta_model import MetaLangchainQuackamollieModel
[docs]
def get_langchain_models_from_entrypoints(entrypoint_group: str) -> Dict[str, Type[MetaLangchainQuackamollieModel]]:
""" Parse entry_points from a group in order to load and make dynamically available MetaLangchainQuackamollieModels
through the LangchainQuackamollieModelManager
:param entrypoint_group: The entry_point group to iterate over to dynamically find langchain custom models
:type entrypoint_group: str
:return: A dictionary of MetaLangchainQuackamollieModels indexed by entry_point name
:rtype: dict
"""
models: Dict[str, Type[MetaLangchainQuackamollieModel]] = {}
for script in entry_points(group=entrypoint_group):
try:
potential_model = script.load()
except Exception as error:
raise AttributeError(f"Error loading MetaLangchainQuackamollieModel from entrypoint"
f" with name '{script.name}' in group '{entrypoint_group}',"
f" with exception:\n{error}")
if issubclass(potential_model, MetaLangchainQuackamollieModel):
models[script.name] = potential_model
else:
raise AttributeError(f"Error loaded class '{potential_model.__name__}', from entrypoint"
f" with name '{script.name}' in group '{entrypoint_group}',"
f" doesn't inherit from MetaLangchainQuackamollieModel.")
return models