_last_max_tokens() — langchain Function Reference
Architecture documentation for the _last_max_tokens() function in utils.py from the langchain codebase.
Entity Profile
Dependency Diagram
graph TD 9e133c6c_250c_1c48_07a7_cf5acf5d50d3["_last_max_tokens()"] 0b528c80_0ce7_1c74_8932_bc433bcb03c6["utils.py"] 9e133c6c_250c_1c48_07a7_cf5acf5d50d3 -->|defined in| 0b528c80_0ce7_1c74_8932_bc433bcb03c6 d6e12d35_63a7_f8dc_cd86_45811dae362e["trim_messages()"] d6e12d35_63a7_f8dc_cd86_45811dae362e -->|calls| 9e133c6c_250c_1c48_07a7_cf5acf5d50d3 f7cf2143_3a02_fa39_15a7_05fb127258ed["_is_message_type()"] 9e133c6c_250c_1c48_07a7_cf5acf5d50d3 -->|calls| f7cf2143_3a02_fa39_15a7_05fb127258ed 83dc7aaa_e1bf_befe_66c0_fdea2b3bccdf["_first_max_tokens()"] 9e133c6c_250c_1c48_07a7_cf5acf5d50d3 -->|calls| 83dc7aaa_e1bf_befe_66c0_fdea2b3bccdf style 9e133c6c_250c_1c48_07a7_cf5acf5d50d3 fill:#6366f1,stroke:#818cf8,color:#fff
Relationship Graph
Source Code
libs/core/langchain_core/messages/utils.py lines 2028–2080
def _last_max_tokens(
messages: Sequence[BaseMessage],
*,
max_tokens: int,
token_counter: Callable[[list[BaseMessage]], int],
text_splitter: Callable[[str], list[str]],
allow_partial: bool = False,
include_system: bool = False,
start_on: str | type[BaseMessage] | Sequence[str | type[BaseMessage]] | None = None,
end_on: str | type[BaseMessage] | Sequence[str | type[BaseMessage]] | None = None,
) -> list[BaseMessage]:
messages = list(messages)
if len(messages) == 0:
return []
# Filter out messages after end_on type
if end_on:
for _ in range(len(messages)):
if not _is_message_type(messages[-1], end_on):
messages.pop()
else:
break
# Handle system message preservation
system_message = None
if include_system and len(messages) > 0 and isinstance(messages[0], SystemMessage):
system_message = messages[0]
messages = messages[1:]
# Reverse messages to use _first_max_tokens with reversed logic
reversed_messages = messages[::-1]
# Calculate remaining tokens after accounting for system message if present
remaining_tokens = max_tokens
if system_message:
system_tokens = token_counter([system_message])
remaining_tokens = max(0, max_tokens - system_tokens)
reversed_result = _first_max_tokens(
reversed_messages,
max_tokens=remaining_tokens,
token_counter=token_counter,
text_splitter=text_splitter,
partial_strategy="last" if allow_partial else None,
end_on=start_on,
)
# Re-reverse the messages and add back the system message if needed
result = reversed_result[::-1]
if system_message:
result = [system_message, *result]
return result
Domain
Subdomains
Defined In
Called By
Source
Frequently Asked Questions
What does _last_max_tokens() do?
_last_max_tokens() is a function in the langchain codebase, defined in libs/core/langchain_core/messages/utils.py.
Where is _last_max_tokens() defined?
_last_max_tokens() is defined in libs/core/langchain_core/messages/utils.py at line 2028.
What does _last_max_tokens() call?
_last_max_tokens() calls 2 function(s): _first_max_tokens, _is_message_type.
What calls _last_max_tokens()?
_last_max_tokens() is called by 1 function(s): trim_messages.
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free