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.")