This commit is contained in:
Vineeth Sai Varikuntla 2026-10-21 15:42:42 +00:00 • committed by GitHub
commit 96af36166b
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 20 additions and 1 deletions

View file

@ -1238,11 +1238,14 @@ def _truncated_for_db(value: str, max_length: int) -> str:
return value
start_chars: Final = int(max_length * 0.35)
end_chars: Final = int(max_length * 0.65)
# The tail is indexed from the front: `value[-0:]` is the whole string, and both shares
# floor to 0 at a limit of 1 or less, so the tightest limits stored the entire prompt.
tail_chars: Final = min(end_chars, max_length - start_chars)
return (
f"{value[:start_chars]}"
f"... ({LITELLM_TRUNCATED_PAYLOAD_FIELD} skipped {len(value) - start_chars - end_chars} chars. "
f"{LITELLM_TRUNCATION_DB_SAFEGUARD_NOTE}) ..."
f"{value[-min(end_chars, max_length - start_chars) :]}"
f"{value[len(value) - tail_chars :]}"
)

View file

@ -911,6 +911,22 @@ def test_sanitize_request_body_for_spend_logs_payload_long_string():
assert sanitized["normal_text"] == "short text"
@pytest.mark.parametrize("limit", [0, 1, -1])
def test_sanitize_request_body_never_stores_more_than_it_was_given(monkeypatch, limit):
"""The truncation is a database-size safeguard, so the tightest limits must be
the ones that store least. Both shares floor to zero at a limit of 1 or less,
and `value[-0:]` is the whole string, so the entire prompt was written out
behind a marker saying it had been skipped."""
monkeypatch.setenv("MAX_STRING_LENGTH_PROMPT_IN_DB", str(limit))
long_string: Final = "a" * 5000
sanitized = _sanitize_request_body_for_spend_logs_payload({"text": long_string})
assert long_string not in sanitized["text"]
assert len(sanitized["text"]) < len(long_string)
assert LITELLM_TRUNCATED_PAYLOAD_FIELD in sanitized["text"]
def test_sanitize_request_body_for_spend_logs_payload_nested_dict():
from litellm.constants import MAX_STRING_LENGTH_PROMPT_IN_DB