Coverage for web_search / provider_registry.py: 87%
15 statements
« prev ^ index » next coverage.py v7.13.5, created at 2026-03-29 02:55 +0800
« prev ^ index » next coverage.py v7.13.5, created at 2026-03-29 02:55 +0800
1from typing import Dict, List, Optional, Type
2from qrclaw.web_search.types import WebSearchProvider
3from qrclaw.web_search.providers.tavily import TavilySearchProvider
4from qrclaw.web_search.providers.duckduckgo import DuckDuckGoSearchProvider
5from qrclaw.web_search.providers.google import GoogleSearchProvider
7_providers: Dict[str, Type[WebSearchProvider]] = {}
9def register_provider(provider_cls: Type[WebSearchProvider]):
10 """注册一个新的 Search Provider"""
11 _providers[provider_cls().id] = provider_cls
13def list_providers() -> List[Type[WebSearchProvider]]:
14 """列出所有已注册的 Provider"""
15 return list(_providers.values())
17def get_provider(provider_id: str) -> Optional[Type[WebSearchProvider]]:
18 """根据 ID 获取 Provider"""
19 return _providers.get(provider_id)
21# 注册所有 Provider
22# 注意:Runtime 的自动选择逻辑会按照这里的注册顺序或者显式优先级来挑
23register_provider(TavilySearchProvider)
24register_provider(GoogleSearchProvider)
25register_provider(DuckDuckGoSearchProvider)