""" # Copyright (c) 2025 PaddlePaddle Authors. All Rights Reserved. # # Licensed under the Apache License, Version 2.0 (the "License" # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. """ from typing import Any, Callable from fastdeploy import envs from fastdeploy.utils import llm_logger as logger def load_plugins_by_group(group: str) -> dict[str, Callable[[], Any]]: import sys if sys.version_info < (3, 10): from importlib_metadata import entry_points else: from importlib.metadata import entry_points allowed_plugins = envs.FD_PLUGINS discovered_plugins = entry_points(group=group) if len(discovered_plugins) == 0: logger.debug("No plugins for group %s found.", group) return {} logger.info("Available plugins for group %s:", group) for plugin in discovered_plugins: logger.info("- %s -> %s", plugin.name, plugin.value) if allowed_plugins is None: logger.info( "All plugins in this group will be loaded. " "You can set `FD_PLUGINS` to control which plugins to load." ) plugins = dict[str, Callable[[], Any]]() for plugin in discovered_plugins: if allowed_plugins is None or plugin.name in allowed_plugins: if allowed_plugins is not None: logger.info("Loading plugin %s", plugin.name) try: func = plugin.load() plugins[plugin.name] = func except Exception: logger.exception("Failed to load plugin %s", plugin.name) return plugins