diff --git a/libs/core/langchain_core/utils/env.py b/libs/core/langchain_core/utils/env.py index f19928e8761ab..7d4d7e7ab5220 100644 --- a/libs/core/langchain_core/utils/env.py +++ b/libs/core/langchain_core/utils/env.py @@ -45,10 +45,10 @@ def get_from_dict_or_env( """ if isinstance(key, (list, tuple)): for k in key: - if value := data.get(k): - return value + if k in data and data[k] is not None: + return data[k] - if isinstance(key, str) and key in data and data[key]: + if isinstance(key, str) and key in data and data[key] is not None: return data[key] key_for_err = key[0] if isinstance(key, (list, tuple)) else key diff --git a/libs/core/tests/unit_tests/utils/test_env.py b/libs/core/tests/unit_tests/utils/test_env.py index 0d52e8534c68f..4d19da54ad32e 100644 --- a/libs/core/tests/unit_tests/utils/test_env.py +++ b/libs/core/tests/unit_tests/utils/test_env.py @@ -67,3 +67,31 @@ def test_get_from_dict_or_env() -> None: ) is None ) + + +def test_get_from_dict_or_env_empty_string() -> None: + """Test that empty strings are returned consistently for list and string keys.""" + data = {"key": "", "other": "value"} + + # Test single string key with empty string value + assert get_from_dict_or_env(data, "key", "ENV_KEY", default="default") == "" + + # Test list of keys with empty string value (should behave the same) + assert get_from_dict_or_env(data, ["key"], "ENV_KEY", default="default") == "" + + # Test list of keys where first key has empty string + result = get_from_dict_or_env(data, ["key", "other"], "ENV_KEY", default="default") + assert result == "" + + +def test_get_from_dict_or_env_none_value() -> None: + """Test that None values are skipped and default is used.""" + data = {"key": None, "other": "value"} + + # Test single string key with None value - should use default + result = get_from_dict_or_env(data, "key", "ENV_KEY", default="default") + assert result == "default" + + # Test list of keys with None value - should skip to next key + result = get_from_dict_or_env(data, ["key", "other"], "ENV_KEY", default="default") + assert result == "value"