mirror of
https://github.com/langchain-ai/langgraph.git
synced 2026-09-12 12:47:53 +02:00
perf: add benchmark profiling mode and fix quadratic repr bottleneck
Add --profile flag to bench/__main__.py that bypasses pyperf and runs each benchmark under cProfile, printing per-benchmark hotspot summaries and writing .prof files for later analysis. Add benchmark-profile and benchmark-profile-spy Makefile targets. Fix O(n^2) performance regression in _get_model_input_state where f-strings eagerly evaluated repr(state) on every call, triggering pydantic __repr__ across all accumulated messages. Move error message construction into the error path so repr is only called when needed. This yields a 3-5x speedup on react_agent_100x benchmarks. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.6
parent
f4a18e0409
commit
d08be136b2
@@ -638,15 +638,18 @@ def create_react_agent(
|
||||
messages = (
|
||||
_get_state_value(state, "llm_input_messages")
|
||||
) or _get_state_value(state, "messages")
|
||||
error_msg = f"Expected input to call_model to have 'llm_input_messages' or 'messages' key, but got {state}"
|
||||
else:
|
||||
messages = _get_state_value(state, "messages")
|
||||
error_msg = (
|
||||
f"Expected input to call_model to have 'messages' key, but got {state}"
|
||||
)
|
||||
|
||||
if messages is None:
|
||||
raise ValueError(error_msg)
|
||||
if pre_model_hook is not None:
|
||||
raise ValueError(
|
||||
f"Expected input to call_model to have 'llm_input_messages' or 'messages' key, but got {state}"
|
||||
)
|
||||
else:
|
||||
raise ValueError(
|
||||
f"Expected input to call_model to have 'messages' key, but got {state}"
|
||||
)
|
||||
|
||||
_validate_chat_history(messages)
|
||||
# we're passing messages under `messages` key, as this is expected by the prompt
|
||||
|
||||
Reference in New Issue
Block a user