mirror of
https://github.com/hwchase17/langchain.git
synced 2025-06-25 08:03:39 +00:00
core: Fix IndexError
when trim_messages
invoked with empty list (#26896)
This prevents `trim_messages` from raising an `IndexError` when invoked with `include_system=True`, `strategy="last"`, and an empty message list. Fixes #26895 Dependencies: none
This commit is contained in:
parent
7091a1a798
commit
121e79b1f0
@ -819,6 +819,7 @@ def trim_messages(
|
|||||||
|
|
||||||
def list_token_counter(messages: Sequence[BaseMessage]) -> int:
|
def list_token_counter(messages: Sequence[BaseMessage]) -> int:
|
||||||
return sum(token_counter(msg) for msg in messages) # type: ignore[arg-type, misc]
|
return sum(token_counter(msg) for msg in messages) # type: ignore[arg-type, misc]
|
||||||
|
|
||||||
else:
|
else:
|
||||||
list_token_counter = token_counter # type: ignore[assignment]
|
list_token_counter = token_counter # type: ignore[assignment]
|
||||||
else:
|
else:
|
||||||
@ -956,6 +957,8 @@ def _last_max_tokens(
|
|||||||
] = None,
|
] = None,
|
||||||
) -> list[BaseMessage]:
|
) -> list[BaseMessage]:
|
||||||
messages = list(messages)
|
messages = list(messages)
|
||||||
|
if len(messages) == 0:
|
||||||
|
return []
|
||||||
if end_on:
|
if end_on:
|
||||||
while messages and not _is_message_type(messages[-1], end_on):
|
while messages and not _is_message_type(messages[-1], end_on):
|
||||||
messages.pop()
|
messages.pop()
|
||||||
|
@ -332,6 +332,19 @@ def test_trim_messages_allow_partial_text_splitter() -> None:
|
|||||||
assert _MESSAGES_TO_TRIM == _MESSAGES_TO_TRIM_COPY
|
assert _MESSAGES_TO_TRIM == _MESSAGES_TO_TRIM_COPY
|
||||||
|
|
||||||
|
|
||||||
|
def test_trim_messages_include_system_strategy_last_empty_messages() -> None:
|
||||||
|
expected: list[BaseMessage] = []
|
||||||
|
|
||||||
|
actual = trim_messages(
|
||||||
|
max_tokens=10,
|
||||||
|
token_counter=dummy_token_counter,
|
||||||
|
strategy="last",
|
||||||
|
include_system=True,
|
||||||
|
).invoke([])
|
||||||
|
|
||||||
|
assert actual == expected
|
||||||
|
|
||||||
|
|
||||||
def test_trim_messages_invoke() -> None:
|
def test_trim_messages_invoke() -> None:
|
||||||
actual = trim_messages(max_tokens=10, token_counter=dummy_token_counter).invoke(
|
actual = trim_messages(max_tokens=10, token_counter=dummy_token_counter).invoke(
|
||||||
_MESSAGES_TO_TRIM
|
_MESSAGES_TO_TRIM
|
||||||
|
Loading…
Reference in New Issue
Block a user