Home / Function/ merge_configs() — langchain Function Reference

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

Subdomains

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