42 lines
1.1 KiB
Python
42 lines
1.1 KiB
Python
from __future__ import annotations
|
|
|
|
import hashlib
|
|
import json
|
|
|
|
from opensquilla.engine.agent import _omit_large_json_tool_fields
|
|
|
|
|
|
def test_large_body_fields_are_omitted_from_json_tool_result() -> None:
|
|
large_body = "x" * 20_001
|
|
large_base64 = "y" * 20_001
|
|
content = json.dumps(
|
|
{
|
|
"status": 200,
|
|
"body": large_body,
|
|
"nested": {"body_base64": large_base64},
|
|
"small": "kept",
|
|
}
|
|
)
|
|
|
|
sanitized, changed = _omit_large_json_tool_fields(content)
|
|
payload = json.loads(sanitized)
|
|
|
|
assert changed is True
|
|
assert payload["body"] == {
|
|
"omitted": True,
|
|
"omitted_chars": len(large_body),
|
|
"sha256": hashlib.sha256(large_body.encode("utf-8")).hexdigest(),
|
|
"reason": "large_tool_result_field",
|
|
}
|
|
assert payload["nested"]["body_base64"]["omitted"] is True
|
|
assert payload["small"] == "kept"
|
|
|
|
|
|
def test_small_body_fields_are_left_unchanged() -> None:
|
|
content = json.dumps({"body": "small", "body_base64": "YWJj"})
|
|
|
|
sanitized, changed = _omit_large_json_tool_fields(content)
|
|
|
|
assert changed is False
|
|
assert sanitized == content
|