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

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 

6 

7_providers: Dict[str, Type[WebSearchProvider]] = {} 

8 

9def register_provider(provider_cls: Type[WebSearchProvider]): 

10 """注册一个新的 Search Provider""" 

11 _providers[provider_cls().id] = provider_cls 

12 

13def list_providers() -> List[Type[WebSearchProvider]]: 

14 """列出所有已注册的 Provider""" 

15 return list(_providers.values()) 

16 

17def get_provider(provider_id: str) -> Optional[Type[WebSearchProvider]]: 

18 """根据 ID 获取 Provider""" 

19 return _providers.get(provider_id) 

20 

21# 注册所有 Provider 

22# 注意:Runtime 的自动选择逻辑会按照这里的注册顺序或者显式优先级来挑 

23register_provider(TavilySearchProvider) 

24register_provider(GoogleSearchProvider) 

25register_provider(DuckDuckGoSearchProvider)