Skip to content

Commit cc3af82

Browse files
npage902mdrxy
andauthored
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 <[email protected]> Co-authored-by: Mason Daugherty <[email protected]>
1 parent 9383b78 commit cc3af82

File tree

2 files changed

+13
-0
lines changed

2 files changed

+13
-0
lines changed

libs/core/langchain_core/load/load.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -265,6 +265,8 @@ def _load(obj: Any) -> Any:
265265
return reviver(loaded_obj)
266266
if isinstance(obj, list):
267267
return [_load(o) for o in obj]
268+
if isinstance(obj, str) and obj in reviver.secrets_map:
269+
return reviver.secrets_map[obj]
268270
return obj
269271

270272
return _load(obj)
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
"""Test for Serializable base class."""
2+
3+
from langchain_core.load.load import load
4+
5+
6+
def test_load_with_string_secrets() -> None:
7+
obj = {"api_key": "__SECRET_API_KEY__"}
8+
secrets_map = {"__SECRET_API_KEY__": "hello"}
9+
result = load(obj, secrets_map=secrets_map)
10+
11+
assert result["api_key"] == "hello"

0 commit comments

Comments
 (0)