""" 适配器工厂 - 根据 config 创建适配器实例 新增模型只需: 1. 实现适配器类(继承 BaseModelAdapter) 2. 在此工厂注册 3. 在 config.yaml 的 models 数组加一项 """ from typing import List from .base_adapter import BaseModelAdapter from .ollama_adapter import OllamaAdapter from .gemini_adapter import GeminiAdapter from .nvidia_adapter import NvidiaVisionAdapter from ..logger import setup_logger logger = setup_logger('fam-edge.adapter_factory') _ADAPTER_REGISTRY = { "ollama": OllamaAdapter, "gemini": GeminiAdapter, "nvidia": NvidiaVisionAdapter, } def build_adapter(config: dict) -> BaseModelAdapter: """根据 config 中的 provider 字段创建适配器""" provider = config.get('provider', '') adapter_cls = _ADAPTER_REGISTRY.get(provider) if adapter_cls is None: raise ValueError(f"未知的模型 provider: {provider},请先注册适配器") return adapter_cls(config) def build_adapters(configs: List[dict]) -> List[BaseModelAdapter]: """批量创建适配器(仅 enabled 的)""" adapters = [] for cfg in configs: if not cfg.get('enabled', False): continue try: adapter = build_adapter(cfg) adapters.append(adapter) logger.info(f"适配器已创建: {adapter.provider_name} ({cfg.get('model_name', '?')})") except Exception as e: logger.error(f"创建适配器失败 ({cfg.get('provider', '?')}): {e}") return adapters def register_adapter(provider_name: str, adapter_cls): """注册新适配器(扩展点,供插件式新增 provider 用,无需改这个文件本身。 当前没有调用方——新模型目前都是直接改 _ADAPTER_REGISTRY,保留此函数是为了 以后接入第三方/可插拔适配器时不用再改工厂代码)。""" _ADAPTER_REGISTRY[provider_name] = adapter_cls logger.info(f"适配器已注册: {provider_name}")