Coverage for src / lilbee / providers / factory.py: 100%

18 statements  

« prev     ^ index     » next       coverage.py v7.13.4, created at 2026-04-29 19:16 +0000

1"""Factory for creating LLM provider instances.""" 

2 

3from __future__ import annotations 

4 

5from typing import TYPE_CHECKING 

6 

7from lilbee.providers.base import ProviderError 

8 

9if TYPE_CHECKING: 

10 from lilbee.config import Config 

11 from lilbee.providers.base import LLMProvider 

12 

13 

14def create_provider(config: Config) -> LLMProvider: 

15 """Create a new LLM provider instance from the given config.""" 

16 provider_name = config.llm_provider 

17 

18 if provider_name == "auto": 

19 # circular: providers/__init__ -> factory -> routing_provider -> config 

20 from lilbee.providers.routing_provider import RoutingProvider 

21 

22 return RoutingProvider() 

23 

24 if provider_name == "llama-cpp": 

25 # circular: providers/__init__ -> factory -> llama_cpp_provider -> config 

26 from lilbee.providers.llama_cpp_provider import LlamaCppProvider 

27 

28 return LlamaCppProvider() 

29 

30 if provider_name == "remote": 

31 # THIS is the swap line: the single import that changes when 

32 # migrating to a different SDK. Replace LitellmSdkBackend here 

33 # with the new adapter and the rest of lilbee is untouched. 

34 # circular: providers/__init__ -> factory -> sdk_llm_provider -> config 

35 from lilbee.providers.litellm_sdk import LitellmSdkBackend 

36 from lilbee.providers.sdk_llm_provider import SdkLLMProvider 

37 

38 backend = LitellmSdkBackend() 

39 if not backend.available(): 

40 raise ProviderError( 

41 "SDK backend adapter is not installed. Install with: pip install 'lilbee[litellm]'" 

42 ) 

43 return SdkLLMProvider( 

44 backend, 

45 base_url=config.remote_base_url, 

46 api_key=config.llm_api_key, 

47 ) # pragma: no cover 

48 

49 raise ProviderError(f"Unknown LLM provider: {provider_name!r}")