From 2c9296c42333aa1142c7ff8828f3ab5a8f21de06 Mon Sep 17 00:00:00 2001 From: Eugene Yurtsev Date: Fri, 10 Apr 2026 11:25:58 -0400 Subject: [PATCH] perf(langchain): add lru cache when resolving types (#36649) speed up for re-instantiation of the same agent --- libs/langchain_v1/langchain/agents/factory.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/libs/langchain_v1/langchain/agents/factory.py b/libs/langchain_v1/langchain/agents/factory.py index b7485b29d35..a72ea8d5492 100644 --- a/libs/langchain_v1/langchain/agents/factory.py +++ b/libs/langchain_v1/langchain/agents/factory.py @@ -2,6 +2,7 @@ from __future__ import annotations +import functools import itertools from dataclasses import dataclass, field, fields from typing import ( @@ -399,9 +400,15 @@ def _chain_async_model_call_handlers( return composed_handler +@functools.lru_cache(maxsize=100) +def _get_schema_type_hints(schema: type) -> dict[str, Any]: + """Return cached type hints for a schema.""" + return get_type_hints(schema, include_extras=True) + + def _resolve_schemas(schemas: set[type]) -> tuple[type, type, type]: """Resolve state, input, and output schemas for the given schemas.""" - schema_hints = {schema: get_type_hints(schema, include_extras=True) for schema in schemas} + schema_hints = {schema: _get_schema_type_hints(schema) for schema in schemas} return ( _resolve_schema(schema_hints, "StateSchema", None), _resolve_schema(schema_hints, "InputSchema", "input"),