Home / Function/ _last_max_tokens() — langchain Function Reference

_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

Subdomains

Called By

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