Coverage for src / local_deep_research / llm / providers / implementations / openrouter.py: 92%

24 statements  

« prev     ^ index     » next       coverage.py v7.12.0, created at 2026-01-11 07:37 +0000

1"""OpenRouter LLM provider for Local Deep Research.""" 

2 

3from loguru import logger 

4 

5from ...llm_registry import register_llm 

6from ..openai_base import OpenAICompatibleProvider 

7 

8 

9class OpenRouterProvider(OpenAICompatibleProvider): 

10 """OpenRouter provider using OpenAI-compatible endpoint. 

11 

12 OpenRouter provides access to many different models through a unified 

13 OpenAI-compatible API, automatically supporting all current and future 

14 models without needing code updates. 

15 """ 

16 

17 provider_name = "OpenRouter" 

18 api_key_setting = "llm.openrouter.api_key" 

19 default_base_url = "https://openrouter.ai/api/v1" 

20 default_model = ( 

21 "meta-llama/llama-3.2-3b-instruct:free" # A free model as default 

22 ) 

23 

24 # Metadata for auto-discovery 

25 provider_key = "OPENROUTER" 

26 company_name = "OpenRouter" 

27 region = "US" 

28 country = "United States" 

29 data_location = "United States" 

30 is_cloud = True 

31 

32 @classmethod 

33 def requires_auth_for_models(cls): 

34 """OpenRouter doesn't require authentication for listing models.""" 

35 return False 

36 

37 

38# Keep the standalone functions for backward compatibility and registration 

39def create_openrouter_llm(model_name=None, temperature=0.7, **kwargs): 

40 """Factory function for OpenRouter LLMs using OpenAI-compatible endpoint. 

41 

42 Args: 

43 model_name: Name of the model to use (e.g., "openai/gpt-4", "anthropic/claude-3-opus", etc.) 

44 temperature: Model temperature (0.0-1.0) 

45 **kwargs: Additional arguments including settings_snapshot 

46 

47 Returns: 

48 A configured ChatOpenAI instance pointing to OpenRouter's API 

49 

50 Raises: 

51 ValueError: If OpenRouter API key is not configured 

52 """ 

53 return OpenRouterProvider.create_llm(model_name, temperature, **kwargs) 

54 

55 

56def is_openrouter_available(settings_snapshot=None): 

57 """Check if OpenRouter is available. 

58 

59 Args: 

60 settings_snapshot: Optional settings snapshot to use 

61 

62 Returns: 

63 True if OpenRouter API key is configured, False otherwise 

64 """ 

65 return OpenRouterProvider.is_available(settings_snapshot) 

66 

67 

68def register_openrouter_provider(): 

69 """Register the OpenRouter provider with the LLM registry.""" 

70 register_llm("openrouter", create_openrouter_llm) 

71 logger.info("Registered OpenRouter LLM provider")