[3.1-3.5] FAM-Edge 全链路 - API-Gateway/Video-Preprocessor/AI-Orchestrator/模型适配器(基类+Ollama+Gemini)/熔断器/JSON解析容错 + 配置
This commit is contained in:
54
fam-edge/src/fam_edge/model_adapters/adapter_factory.py
Normal file
54
fam-edge/src/fam_edge/model_adapters/adapter_factory.py
Normal file
@@ -0,0 +1,54 @@
|
||||
"""
|
||||
适配器工厂 - 根据 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 ..logger import setup_logger
|
||||
|
||||
logger = setup_logger('fam-edge.adapter_factory')
|
||||
|
||||
_ADAPTER_REGISTRY = {
|
||||
"ollama": OllamaAdapter,
|
||||
"gemini": GeminiAdapter,
|
||||
# v1.1 扩展:
|
||||
# "openai": OpenAIAdapter,
|
||||
# "nvidia": NvidiaAdapter,
|
||||
}
|
||||
|
||||
|
||||
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):
|
||||
"""注册新适配器(供扩展使用)"""
|
||||
_ADAPTER_REGISTRY[provider_name] = adapter_cls
|
||||
logger.info(f"适配器已注册: {provider_name}")
|
||||
Reference in New Issue
Block a user