From 6530ffde444c7982b1585723d078baf7ceaace77 Mon Sep 17 00:00:00 2001 From: npage902 Date: Mon, 20 Oct 2025 13:08:04 -0700 Subject: [PATCH 1/5] fix: added string val check for secrets_map in load() --- libs/core/langchain_core/load/load.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/libs/core/langchain_core/load/load.py b/libs/core/langchain_core/load/load.py index ed832e69dbb8a..eb50fddcc4b8c 100644 --- a/libs/core/langchain_core/load/load.py +++ b/libs/core/langchain_core/load/load.py @@ -265,6 +265,8 @@ def _load(obj: Any) -> Any: return reviver(loaded_obj) if isinstance(obj, list): return [_load(o) for o in obj] + if isinstance(obj, str) and obj in reviver.secrets_map: + return reviver.secrets_map[obj] return obj return _load(obj) From c80908d82b0472fd96375679034fd484ef9a44cf Mon Sep 17 00:00:00 2001 From: npage902 Date: Mon, 20 Oct 2025 13:09:07 -0700 Subject: [PATCH 2/5] fix: added test case for loading with plaintext strings in secrets_map dict --- libs/langchain/tests/unit_tests/load/test_load.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/libs/langchain/tests/unit_tests/load/test_load.py b/libs/langchain/tests/unit_tests/load/test_load.py index d6bcb46301693..95806ca9cad8b 100644 --- a/libs/langchain/tests/unit_tests/load/test_load.py +++ b/libs/langchain/tests/unit_tests/load/test_load.py @@ -194,3 +194,11 @@ def test_loads_with_missing_secrets() -> None: # Should throw on instantiation, not deserialization with pytest.raises(openai.OpenAIError): loads(llm_string) + +def test_load_with_string_secrets() -> None: + obj = {"api_key": "__SECRET_API_KEY__"} + secret_key = "secret_key_1234" + secrets_map = {"__SECRET_API_KEY__": secret_key} + result = load(obj, secrets_map=secrets_map) + + assert result["api_key"] == secret_key From a6b98186694170b47a2b36d032b4e4216884e83c Mon Sep 17 00:00:00 2001 From: npage902 Date: Mon, 20 Oct 2025 16:31:47 -0700 Subject: [PATCH 3/5] fix: attempting to fix lint issue --- libs/langchain/tests/unit_tests/load/test_load.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/libs/langchain/tests/unit_tests/load/test_load.py b/libs/langchain/tests/unit_tests/load/test_load.py index 95806ca9cad8b..3036afbd76757 100644 --- a/libs/langchain/tests/unit_tests/load/test_load.py +++ b/libs/langchain/tests/unit_tests/load/test_load.py @@ -197,8 +197,7 @@ def test_loads_with_missing_secrets() -> None: def test_load_with_string_secrets() -> None: obj = {"api_key": "__SECRET_API_KEY__"} - secret_key = "secret_key_1234" - secrets_map = {"__SECRET_API_KEY__": secret_key} + secrets_map = {"__SECRET_API_KEY__": "hello"} result = load(obj, secrets_map=secrets_map) - assert result["api_key"] == secret_key + assert result["api_key"] == "hello" From 34e85fbe2461f4ffaadc430429fcc3a25ec0ec41 Mon Sep 17 00:00:00 2001 From: npage902 Date: Sun, 26 Oct 2025 11:39:46 -0700 Subject: [PATCH 4/5] fix: attempting to fix lint issue 2 --- libs/langchain/tests/unit_tests/load/test_load.py | 1 + 1 file changed, 1 insertion(+) diff --git a/libs/langchain/tests/unit_tests/load/test_load.py b/libs/langchain/tests/unit_tests/load/test_load.py index 3036afbd76757..9a2e21df9515a 100644 --- a/libs/langchain/tests/unit_tests/load/test_load.py +++ b/libs/langchain/tests/unit_tests/load/test_load.py @@ -195,6 +195,7 @@ def test_loads_with_missing_secrets() -> None: with pytest.raises(openai.OpenAIError): loads(llm_string) + def test_load_with_string_secrets() -> None: obj = {"api_key": "__SECRET_API_KEY__"} secrets_map = {"__SECRET_API_KEY__": "hello"} From 314bce9c18fc6b5a47ae1b4bb55786cba3705e77 Mon Sep 17 00:00:00 2001 From: Mason Daugherty Date: Fri, 7 Nov 2025 17:08:57 -0500 Subject: [PATCH 5/5] relocate test --- libs/core/tests/unit_tests/load/test_load.py | 11 +++++++++++ libs/langchain/tests/unit_tests/load/test_load.py | 8 -------- 2 files changed, 11 insertions(+), 8 deletions(-) create mode 100644 libs/core/tests/unit_tests/load/test_load.py diff --git a/libs/core/tests/unit_tests/load/test_load.py b/libs/core/tests/unit_tests/load/test_load.py new file mode 100644 index 0000000000000..aa2b32591569b --- /dev/null +++ b/libs/core/tests/unit_tests/load/test_load.py @@ -0,0 +1,11 @@ +"""Test for Serializable base class.""" + +from langchain_core.load.load import load + + +def test_load_with_string_secrets() -> None: + obj = {"api_key": "__SECRET_API_KEY__"} + secrets_map = {"__SECRET_API_KEY__": "hello"} + result = load(obj, secrets_map=secrets_map) + + assert result["api_key"] == "hello" diff --git a/libs/langchain/tests/unit_tests/load/test_load.py b/libs/langchain/tests/unit_tests/load/test_load.py index 9a2e21df9515a..d6bcb46301693 100644 --- a/libs/langchain/tests/unit_tests/load/test_load.py +++ b/libs/langchain/tests/unit_tests/load/test_load.py @@ -194,11 +194,3 @@ def test_loads_with_missing_secrets() -> None: # Should throw on instantiation, not deserialization with pytest.raises(openai.OpenAIError): loads(llm_string) - - -def test_load_with_string_secrets() -> None: - obj = {"api_key": "__SECRET_API_KEY__"} - secrets_map = {"__SECRET_API_KEY__": "hello"} - result = load(obj, secrets_map=secrets_map) - - assert result["api_key"] == "hello"