merge_configs() — langchain Function Reference
Architecture documentation for the merge_configs() function in config.py from the langchain codebase.
Entity Profile
Dependency Diagram
graph TD 438f2d32_8723_fb31_f5c9_3d3b774aa064["merge_configs()"] 4d16987d_fe07_22bb_f46d_7daeb24e0367["config.py"] 438f2d32_8723_fb31_f5c9_3d3b774aa064 -->|defined in| 4d16987d_fe07_22bb_f46d_7daeb24e0367 79a92f47_0451_ce36_938e_d386903a786f["ensure_config()"] 438f2d32_8723_fb31_f5c9_3d3b774aa064 -->|calls| 79a92f47_0451_ce36_938e_d386903a786f style 438f2d32_8723_fb31_f5c9_3d3b774aa064 fill:#6366f1,stroke:#818cf8,color:#fff
Relationship Graph
Source Code
libs/core/langchain_core/runnables/config.py lines 357–420
def merge_configs(*configs: RunnableConfig | None) -> RunnableConfig:
"""Merge multiple configs into one.
Args:
*configs: The configs to merge.
Returns:
The merged config.
"""
base: RunnableConfig = {}
# Even though the keys aren't literals, this is correct
# because both dicts are the same type
for config in (ensure_config(c) for c in configs if c is not None):
for key in config:
if key == "metadata":
base["metadata"] = {
**base.get("metadata", {}),
**(config.get("metadata") or {}),
}
elif key == "tags":
base["tags"] = sorted(
set(base.get("tags", []) + (config.get("tags") or [])),
)
elif key == "configurable":
base["configurable"] = {
**base.get("configurable", {}),
**(config.get("configurable") or {}),
}
elif key == "callbacks":
base_callbacks = base.get("callbacks")
these_callbacks = config["callbacks"]
# callbacks can be either None, list[handler] or manager
# so merging two callbacks values has 6 cases
if isinstance(these_callbacks, list):
if base_callbacks is None:
base["callbacks"] = these_callbacks.copy()
elif isinstance(base_callbacks, list):
base["callbacks"] = base_callbacks + these_callbacks
else:
# base_callbacks is a manager
mngr = base_callbacks.copy()
for callback in these_callbacks:
mngr.add_handler(callback, inherit=True)
base["callbacks"] = mngr
elif these_callbacks is not None:
# these_callbacks is a manager
if base_callbacks is None:
base["callbacks"] = these_callbacks.copy()
elif isinstance(base_callbacks, list):
mngr = these_callbacks.copy()
for callback in base_callbacks:
mngr.add_handler(callback, inherit=True)
base["callbacks"] = mngr
else:
# base_callbacks is also a manager
base["callbacks"] = base_callbacks.merge(these_callbacks)
elif key == "recursion_limit":
if config["recursion_limit"] != DEFAULT_RECURSION_LIMIT:
base["recursion_limit"] = config["recursion_limit"]
elif key in COPIABLE_KEYS and config[key] is not None: # type: ignore[literal-required]
base[key] = config[key].copy() # type: ignore[literal-required]
else:
base[key] = config[key] or base.get(key) # type: ignore[literal-required]
return base
Domain
Subdomains
Defined In
Calls
Source
Frequently Asked Questions
What does merge_configs() do?
merge_configs() is a function in the langchain codebase, defined in libs/core/langchain_core/runnables/config.py.
Where is merge_configs() defined?
merge_configs() is defined in libs/core/langchain_core/runnables/config.py at line 357.
What does merge_configs() call?
merge_configs() calls 1 function(s): ensure_config.
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free