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
« prev ^ index » next coverage.py v7.13.4, created at 2026-04-29 19:16 +0000
1"""Factory for creating LLM provider instances."""
3from __future__ import annotations
5from typing import TYPE_CHECKING
7from lilbee.providers.base import ProviderError
9if TYPE_CHECKING:
10 from lilbee.config import Config
11 from lilbee.providers.base import LLMProvider
14def create_provider(config: Config) -> LLMProvider:
15 """Create a new LLM provider instance from the given config."""
16 provider_name = config.llm_provider
18 if provider_name == "auto":
19 # circular: providers/__init__ -> factory -> routing_provider -> config
20 from lilbee.providers.routing_provider import RoutingProvider
22 return RoutingProvider()
24 if provider_name == "llama-cpp":
25 # circular: providers/__init__ -> factory -> llama_cpp_provider -> config
26 from lilbee.providers.llama_cpp_provider import LlamaCppProvider
28 return LlamaCppProvider()
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
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
49 raise ProviderError(f"Unknown LLM provider: {provider_name!r}")