foundations — schema, _api, adapters, load, utils, graphs, chat_loaders

schema, _api, adapters, load, utils, graphs, chat_loaders

Module langchain_classic/foundations/ — schema, _api, adapters, load, utils, graphs, chat_loaders. Part of the Foundations group.

🎯 Why This Module Exists

This module is documented from the foundations_deep.md Phase 1B research artifact. See sections below for design decisions, algorithms, error philosophy, performance, and evolution clues.

90
Source files
7
Sub-directories
Foundations
Category
Python
Language

Schema Versioning Adapters

Architecture

flowchart LR
  subgraph Core["langchain_classic/foundations/"]
    BASE["Base abstraction"]
    IMPLS["Concrete implementations"]
    BASE --> IMPLS
  end
  subgraph Up["Upstream callers"]
    U1["chains/"]
    U2["agents/"]
  end
  subgraph Down["Downstream"]
    D1["langchain_core"]
    D2["External providers"]
  end
  Up --> Core
  Core --> Down

Data Flow

sequenceDiagram
  participant Caller as Caller
  participant Foundati as foundations
  participant Core as langchain_core
  participant Ext as External
  Caller->>Foundati: invoke(input)
  Note over Foundati: Validate & route
  Foundati->>Core: delegate primitive
  Core->>Ext: provider call
  Ext-->>Core: response
  Core-->>Foundati: typed output
  Foundati-->>Caller: result

Existence rationale

These small modules are the plumbing: they don't hold the headline algorithms but they make the whole package interoperate.

Design decisions

ModuleDecisionWhy
load/Serializable.is_lc_serializable() -> bool + __get_lc_namespace__()Lets serializer reconstruct the class from its declared module path even after refactors
load/secrets_map indirectionKeep API keys out of dumps; load reinjects from env vars
_api/is_interactive_env() suppresses warningsPrevents __getattr__ warnings polluting Jupyter / REPL outputs
_api/@deprecated(since="0.1.0", alternative="…")Standard, machine-readable deprecation metadata
schema/Pure re-exportBackward compat for pre-0.1 import paths
adapters/openai.pyTranslate dict messages ↔ BaseMessageLets users feed OpenAI-format JSON into LangChain pipelines
runnables/openai_assistant.pyWraps the Assistants API as a single RunnableThe Assistant has its own server-side loop; we just adapt the surface
chat_loaders/Each loader returns Iterator[ChatSession]Streaming loads of multi-GB exports
graphs/Each graph wrapper exposes query(cypher) -> list[dict] and schema propertyUniform interface so graph_qa chains are vendor-agnostic
utilities/API wrappers separated from tools/Reusable in non-tool contexts (e.g., directly inside a chain)
smith/Dataset-driven evaluationLangSmith's UI consumes dataset + run + feedback triples

Algorithm deep-dive — Serializable round-trip

Trace. dumps(chain):

  1. Walk the instance recursively. For each Pydantic field:
  1. Build {"lc": 1, "type": "constructor", "id": [*ns, class_name], "kwargs": {...}}.

loads(s):

  1. Parse JSON.
  2. Look up (*ns, class_name) via import_class_from_namespace.
  3. Reconstruct: Class(**rebuilt_kwargs) — recursing for Serializable subobjects.
  4. Reinject secrets from environment if secrets_map declared.

Why a typed envelope. Forward compatibility — adding a field to a chain doesn't break old dumps; renaming a class can be supported via a registry remap.

Error philosophy

Foundation code prefers silent fallback to crashing user code:

Step-by-Step Walkthrough

Follow a typical operation through the foundations/ module:

  1. Caller invokes the public surface — usually .invoke(input) on a Runnable, or a legacy __call__(inputs_dict) on a Chain subclass.
  2. Pydantic validation — every entry point is a BaseModel; constructor args, input dicts, and tool args_schema are validated before any expensive work runs. Fail-fast on type errors.
  3. CallbackManager.configure — a fresh manager is built per call, fans on_*_start events to all subscribers (LangSmith tracer, stdout handler, custom logging), and stamps a UUID4 run_id for tree reconstruction.
  4. foundations-specific logic — the module's core method runs: prompt rendering, retrieval, tool execution, memory load, document split, etc. See the deep-dive sections above.
  5. Provider call — typically a single HTTP request to OpenAI/Anthropic/etc., or a local SDK call. Retries are handled by tenacity with exponential backoff and a configurable max-attempts knob.
  6. Streaming fan-out — if the provider streams tokens, each chunk fires on_llm_new_token through the callback manager so downstream observers (UI, log, tracer) see partial output.
  7. OutputParser pass — if a parser is attached, the raw provider output is parsed into a structured Python object; OutputParserException may trigger a retry chain (RetryWithErrorOutputParser).
  8. Memory write-back — for chains/agents that have a BaseMemory attached, save_context(inputs, outputs) persists the turn before returning to the caller.
  9. on_*_end fan-out — the callback manager closes the run span; tracers serialise the Run tree and ship it to LangSmith asynchronously.
  10. Result returned — caller receives a typed object (AIMessage, dict, BaseModel, list[Document], ...) matching the module's declared output schema.

What Could Go Wrong

Failure Mode Trigger Detection Recovery
Provider 5xx / rate-limit OpenAI/Anthropic/etc. transient error HTTP status from SDK tenacity retries with exponential backoff up to max_retries; then surface to caller
Output parser failure LLM returned malformed JSON / wrong schema OutputParserException in parser RetryWithErrorOutputParser re-prompts with the parser error included; or surface
Pydantic validation Caller passes wrong-shaped dict ValidationError at __init__ / invoke Surface immediately — no fallback is correct here
Callback handler exception User-supplied tracer raises Try/except around each fan-out Logged and swallowed by default; raise_error=True to opt in to propagation
Provider auth missing OPENAI_API_KEY unset SDK AuthenticationError Surface with a helpful message; no retry (would just fail again)

Performance Profile

Hot Paths

Resource Usage

Directory Map

Source tree for foundations
foundations/  (source listing unavailable)