This commit is contained in:
Vineeth Sai Varikuntla 2026-08-28 18:17:03 -04:00 committed by GitHub
commit 28735ed329
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 22 additions and 1 deletions

View file

@ -7117,7 +7117,10 @@ def shorten_message_to_fit_limit(message, tokens_needed, model: str | None, rais
half_length = new_length // 2
left_half = content[:half_length]
right_half = content[-half_length:]
# content[-0:] is content[0:], i.e. the whole string, so a zero half has to be
# spelled out. Otherwise every further attempt prepends ".." to the full content
# and the message grows by two characters instead of shrinking.
right_half = content[-half_length:] if half_length else ""
trimmed_content = left_half + ".." + right_half
message["content"] = trimmed_content

View file

@ -5661,3 +5661,21 @@ def test_snapshot_exception_for_hook_preserves_suppress_context_flag() -> None:
snapshot = _snapshot_exception_for_hook(e)
assert snapshot.__suppress_context__ is False
assert snapshot.__context__ is e.__context__
def test_shorten_message_to_fit_limit_never_grows_content():
"""A zero half_length must not turn the trim into a two-character prefix.
`content[-0:]` is `content[0:]`, so with half_length == 0 the "right half" is the
whole string and each attempt returns `".." + content`. The loop then runs its full
attempt budget growing the message two characters at a time.
"""
from litellm.utils import shorten_message_to_fit_limit
content = "hello world " * 40
message = {"role": "user", "content": content}
result = shorten_message_to_fit_limit(message, tokens_needed=1, model="claude-3-5-sonnet-20240620")
assert len(result["content"]) < len(content)
assert not result["content"].startswith("....")