From cc3af82b474efb63a3c7d91170a4d0d511832938 Mon Sep 17 00:00:00 2001 From: npage902 Date: Fri, 7 Nov 2025 14:14:13 -0800 Subject: [PATCH] fix(core): applied `secrets_map` in `load` to plain string values (#33678) Replaces #33618 **Description:** Fixes the bug in the `load()` function where secret placeholders in plain dicts were not replaced, even if they match a key in `secrets_map`, and adds a test case. Example: ```py 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) ``` Before this change, printing `api_key` in `result` would output `"__SECRET_API_KEY__"`. Now, it will properly output `"secret_key_1234"`. **Issue:** Fixes #31804 **Dependencies:** None `make format`, `make lint`, and `make test` have all passed on my machine. --------- Co-authored-by: Mason Daugherty Co-authored-by: Mason Daugherty --- libs/core/langchain_core/load/load.py | 2 ++ libs/core/tests/unit_tests/load/test_load.py | 11 +++++++++++ 2 files changed, 13 insertions(+) create mode 100644 libs/core/tests/unit_tests/load/test_load.py diff --git a/libs/core/langchain_core/load/load.py b/libs/core/langchain_core/load/load.py index ed832e69dbb..eb50fddcc4b 100644 --- a/libs/core/langchain_core/load/load.py +++ b/libs/core/langchain_core/load/load.py @@ -265,6 +265,8 @@ def load( 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) 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 00000000000..aa2b3259156 --- /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"