Source code for lalandre_core.llm.providers

"""
Shared LLM provider utilities: normalization, URL resolution, API key resolution.
"""

from typing import Optional


[docs] def normalize_provider(provider: str) -> str: """Normalize provider name: strip, lowercase, openai → openai_compatible.""" normalized = provider.strip().lower().replace("-", "_") if normalized == "openai": return "openai_compatible" return normalized
[docs] def normalize_base_url(*, provider: str, base_url: str) -> str: """Normalize base URL: strip, rstrip /.""" normalized = base_url.strip().rstrip("/") return normalized
[docs] def resolve_api_key( *, provider: str, api_key: Optional[str] = None, mistral_api_key: Optional[str] = None, allow_empty: bool = False, ) -> str: """Resolve API key with priority: mistral_api_key > api_key > error.""" if provider == "mistral": for candidate in (mistral_api_key, api_key): normalized = (candidate or "").strip() if normalized: return normalized if allow_empty: return "" raise ValueError("Mistral API key required. Set MISTRAL_API_KEY (Vault/.env).") # openai_compatible for candidate in (api_key, mistral_api_key): normalized = (candidate or "").strip() if normalized: return normalized if allow_empty: return "" raise ValueError(f"API key required for provider {provider!r}. Set LLM_API_KEY or MISTRAL_API_KEY.")