From 139824d12154e4922c03b58bb6e6a649487bdf54 Mon Sep 17 00:00:00 2001 From: Austin Varga <64624232+avarga1@users.noreply.github.com> Date: Thu, 9 Apr 2026 00:26:03 -0600 Subject: [PATCH] fix(lemonade): respect api_key and LEMONADE_API_KEY env var in provider info MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit _get_openai_compatible_provider_info hardcoded key = "lemonade" regardless of any api_key passed by the caller or set in the environment. Lemonade server now supports API key authentication, so use the standard priority chain: passed api_key → LEMONADE_API_KEY env var → "lemonade" sentinel. Closes #25363 --- litellm/llms/lemonade/chat/transformation.py | 3 +- .../llms/lemonade/test_lemonade.py | 29 +++++++++++++++++-- 2 files changed, 28 insertions(+), 4 deletions(-) diff --git a/litellm/llms/lemonade/chat/transformation.py b/litellm/llms/lemonade/chat/transformation.py index 168d51a16d8..ff75c2cbd7a 100644 --- a/litellm/llms/lemonade/chat/transformation.py +++ b/litellm/llms/lemonade/chat/transformation.py @@ -110,8 +110,7 @@ class LemonadeChatConfig(OpenAILikeChatConfig): or get_secret_str("LEMONADE_API_BASE") or "http://localhost:8000/api/v1" ) # type: ignore - # Lemonade doesn't check the key - key = "lemonade" + key = api_key or get_secret_str("LEMONADE_API_KEY") or "lemonade" return api_base, key def transform_response( diff --git a/tests/test_litellm/llms/lemonade/test_lemonade.py b/tests/test_litellm/llms/lemonade/test_lemonade.py index 5f9f392ea32..f0f5971d8fe 100644 --- a/tests/test_litellm/llms/lemonade/test_lemonade.py +++ b/tests/test_litellm/llms/lemonade/test_lemonade.py @@ -37,7 +37,7 @@ def test_get_openai_compatible_provider_info(): ) assert api_base == "http://localhost:8000/api/v1" - assert key == "lemonade" + assert key == "lemonade" # falls back to sentinel when no key provided def test_get_openai_compatible_provider_info_with_custom_base(): @@ -50,7 +50,32 @@ def test_get_openai_compatible_provider_info_with_custom_base(): ) assert api_base == custom_api_base - assert key == "lemonade" + assert key == "lemonade" # falls back to sentinel when no key provided + + +def test_get_openai_compatible_provider_info_with_api_key(): + """Test that a passed api_key is respected""" + config = LemonadeChatConfig() + + api_base, key = config._get_openai_compatible_provider_info( + api_base=None, + api_key="my-secret-key", + ) + + assert key == "my-secret-key" + + +def test_get_openai_compatible_provider_info_with_env_key(monkeypatch): + """Test that LEMONADE_API_KEY env var is used when no api_key is passed""" + monkeypatch.setenv("LEMONADE_API_KEY", "env-secret-key") + config = LemonadeChatConfig() + + api_base, key = config._get_openai_compatible_provider_info( + api_base=None, + api_key=None, + ) + + assert key == "env-secret-key" def test_transform_response():