| """Provider factory — builds an LLMProvider by name from settings.""" |
|
|
| from __future__ import annotations |
|
|
| from nl_sql.config import Settings, get_settings |
| from nl_sql.llm.providers.base import LLMProvider, ProviderError |
| from nl_sql.llm.providers.github_models import GitHubModelsProvider |
| from nl_sql.llm.providers.groq import GroqProvider |
| from nl_sql.llm.providers.mistral import MistralProvider |
| from nl_sql.llm.providers.ollama import OllamaProvider |
| from nl_sql.llm.providers.openrouter import OpenRouterProvider |
| from nl_sql.llm.providers.perplexity import PerplexityProvider |
|
|
|
|
| def build_provider(name: str, settings: Settings | None = None) -> LLMProvider: |
| """Build an LLMProvider by short name. |
| |
| Recognized names: ``mistral``, ``github_models``, ``groq``, ``ollama``, |
| ``perplexity``, ``openrouter``. Raises ProviderError for unknown names |
| or missing credentials. |
| """ |
| s = settings or get_settings() |
| match name: |
| case "mistral": |
| return MistralProvider( |
| api_key=s.mistral_api_key, |
| gen_model=s.mistral_gen_model, |
| embed_model=s.mistral_embed_model, |
| base_url=s.mistral_base_url, |
| ) |
| case "github_models": |
| return GitHubModelsProvider( |
| token=s.github_token, |
| model=s.github_models_model, |
| base_url=s.github_models_base_url, |
| ) |
| case "groq": |
| return GroqProvider( |
| api_key=s.groq_api_key, |
| model=s.groq_model, |
| base_url=s.groq_base_url, |
| ) |
| case "ollama": |
| return OllamaProvider( |
| model=s.ollama_gen_model, |
| base_url=s.ollama_base_url, |
| timeout_seconds=s.ollama_timeout_seconds, |
| ) |
| case "perplexity": |
| return PerplexityProvider( |
| model=s.perplexity_browser_model, |
| base_url=s.perplexity_base_url, |
| ) |
| case "openrouter": |
| return OpenRouterProvider( |
| api_key=s.openrouter_api_key, |
| model=s.openrouter_model, |
| base_url=s.openrouter_base_url, |
| ) |
| case _: |
| raise ProviderError(f"unknown provider name: {name!r}") |
|
|