diff --git a/libs/core/langchain_core/load/dump.py b/libs/core/langchain_core/load/dump.py index 2e2293f99e7..07c956a8400 100644 --- a/libs/core/langchain_core/load/dump.py +++ b/libs/core/langchain_core/load/dump.py @@ -13,12 +13,15 @@ def default(obj: Any) -> Any: return to_json_not_implemented(obj) -def dumps(obj: Any, *, pretty: bool = False) -> str: +def dumps(obj: Any, *, pretty: bool = False, **kwargs: Any) -> str: """Return a json string representation of an object.""" + if "default" in kwargs: + raise ValueError("`default` should not be passed to dumps") if pretty: - return json.dumps(obj, default=default, indent=2) + indent = kwargs.pop("indent", 2) + return json.dumps(obj, default=default, indent=indent, **kwargs) else: - return json.dumps(obj, default=default) + return json.dumps(obj, default=default, **kwargs) def dumpd(obj: Any) -> Dict[str, Any]: diff --git a/libs/langchain/tests/unit_tests/load/__snapshots__/test_dump.ambr b/libs/langchain/tests/unit_tests/load/__snapshots__/test_dump.ambr index 5b6b0e0778f..92427020e31 100644 --- a/libs/langchain/tests/unit_tests/load/__snapshots__/test_dump.ambr +++ b/libs/langchain/tests/unit_tests/load/__snapshots__/test_dump.ambr @@ -57,6 +57,9 @@ } ''' # --- +# name: test_person_with_kwargs + '{"lc":1,"type":"constructor","id":["tests","unit_tests","load","test_dump","Person"],"kwargs":{"secret":{"lc":1,"type":"secret","id":["SECRET"]},"you_can_see_me":"hello"}}' +# --- # name: test_serialize_llmchain ''' { diff --git a/libs/langchain/tests/unit_tests/load/test_dump.py b/libs/langchain/tests/unit_tests/load/test_dump.py index 8e0dcd25fdc..6eef608e101 100644 --- a/libs/langchain/tests/unit_tests/load/test_dump.py +++ b/libs/langchain/tests/unit_tests/load/test_dump.py @@ -141,3 +141,14 @@ def test_serialize_llmchain_with_non_serializable_arg(snapshot: Any) -> None: prompt = PromptTemplate.from_template("hello {name}!") chain = LLMChain(llm=llm, prompt=prompt) assert dumps(chain, pretty=True) == snapshot + + +def test_person_with_kwargs(snapshot: Any) -> None: + person = Person(secret="hello") + assert dumps(person, separators=(",", ":")) == snapshot + + +def test_person_with_invalid_kwargs() -> None: + person = Person(secret="hello") + with pytest.raises(TypeError): + dumps(person, invalid_kwarg="hello")