Use validate_environment to resolve provider env var

Naively uppercasing the routing prefix breaks for providers whose
LiteLLM env var name doesn't match the prefix verbatim:
  together_ai/...  needs TOGETHERAI_API_KEY  (no underscore)
  perplexity/...   needs PERPLEXITYAI_API_KEY

Ask LiteLLM directly via litellm.validate_environment(model=...) which
env vars it consults for the chosen provider, then setdefault each one
to LLM_API_KEY. This is the SDK-blessed lookup and stays correct for
every provider LiteLLM supports without a hand-maintained name map.

Lowercase the routed model name before lookup so mixed-case user input
(e.g. Together_AI/...) still resolves.
This commit is contained in:
0xallam
2026-06-07 22:58:48 +03:00
committed by Ahmed Allam
parent dd1f816f7c
commit 1473fc7336
+8 -5
View File
@@ -61,17 +61,20 @@ def configure_sdk_model_defaults(settings: Settings) -> None:
def _mirror_api_key_to_provider_env(model_name: str | None, api_key: str) -> None:
if not model_name:
return
import litellm
name = normalize_model_name(model_name)
for prefix in ("litellm/", "any-llm/"):
if name.lower().startswith(prefix):
name = name[len(prefix) :]
break
if "/" not in name:
try:
report = litellm.validate_environment(model=name.lower())
except Exception: # noqa: BLE001
return
provider = name.split("/", 1)[0].strip().upper()
if not provider:
return
os.environ.setdefault(f"{provider}_API_KEY", api_key)
for env_key in report.get("missing_keys") or []:
if env_key.endswith("_API_KEY"):
os.environ.setdefault(env_key, api_key)
def _configure_litellm_compatibility() -> None: