Skip to content

Commit 868033c

Browse files
ref(langgraph): Revert input truncation
1 parent 8ff1b2c commit 868033c

2 files changed

Lines changed: 10 additions & 79 deletions

File tree

sentry_sdk/integrations/langgraph.py

Lines changed: 10 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
from sentry_sdk.ai.utils import (
66
set_data_normalized,
77
normalize_message_roles,
8-
truncate_and_annotate_messages,
98
)
109
from sentry_sdk.consts import OP, SPANDATA
1110
from sentry_sdk.integrations import DidNotEnable, Integration
@@ -181,17 +180,12 @@ def new_invoke(self: "Any", *args: "Any", **kwargs: "Any") -> "Any":
181180
input_messages = _parse_langgraph_messages(args[0])
182181
if input_messages:
183182
normalized_input_messages = normalize_message_roles(input_messages)
184-
scope = sentry_sdk.get_current_scope()
185-
messages_data = truncate_and_annotate_messages(
186-
normalized_input_messages, span, scope
183+
set_data_normalized(
184+
span,
185+
SPANDATA.GEN_AI_REQUEST_MESSAGES,
186+
normalized_input_messages,
187+
unpack=False,
187188
)
188-
if messages_data is not None:
189-
set_data_normalized(
190-
span,
191-
SPANDATA.GEN_AI_REQUEST_MESSAGES,
192-
messages_data,
193-
unpack=False,
194-
)
195189

196190
result = f(self, *args, **kwargs)
197191

@@ -234,17 +228,12 @@ async def new_ainvoke(self: "Any", *args: "Any", **kwargs: "Any") -> "Any":
234228
input_messages = _parse_langgraph_messages(args[0])
235229
if input_messages:
236230
normalized_input_messages = normalize_message_roles(input_messages)
237-
scope = sentry_sdk.get_current_scope()
238-
messages_data = truncate_and_annotate_messages(
239-
normalized_input_messages, span, scope
231+
set_data_normalized(
232+
span,
233+
SPANDATA.GEN_AI_REQUEST_MESSAGES,
234+
normalized_input_messages,
235+
unpack=False,
240236
)
241-
if messages_data is not None:
242-
set_data_normalized(
243-
span,
244-
SPANDATA.GEN_AI_REQUEST_MESSAGES,
245-
messages_data,
246-
unpack=False,
247-
)
248237

249238
result = await f(self, *args, **kwargs)
250239

tests/integrations/langgraph/test_langgraph.py

Lines changed: 0 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -1351,61 +1351,3 @@ def __init__(self, content, message_type="human"):
13511351
# Verify no "ai" roles remain
13521352
roles = [msg["role"] for msg in stored_messages if "role" in msg]
13531353
assert "ai" not in roles
1354-
1355-
1356-
def test_langgraph_message_truncation(sentry_init, capture_items):
1357-
"""Test that large messages are truncated properly in Langgraph integration."""
1358-
import json
1359-
1360-
sentry_init(
1361-
integrations=[LanggraphIntegration(include_prompts=True)],
1362-
traces_sample_rate=1.0,
1363-
send_default_pii=True,
1364-
)
1365-
items = capture_items("transaction", "span")
1366-
1367-
large_content = (
1368-
"This is a very long message that will exceed our size limits. " * 1000
1369-
)
1370-
test_state = {
1371-
"messages": [
1372-
MockMessage("small message 1", name="user"),
1373-
MockMessage(large_content, name="assistant"),
1374-
MockMessage(large_content, name="user"),
1375-
MockMessage("small message 4", name="assistant"),
1376-
MockMessage("small message 5", name="user"),
1377-
]
1378-
}
1379-
1380-
pregel = MockPregelInstance("test_graph")
1381-
1382-
def original_invoke(self, *args, **kwargs):
1383-
return {"messages": args[0].get("messages", [])}
1384-
1385-
with start_transaction():
1386-
wrapped_invoke = _wrap_pregel_invoke(original_invoke)
1387-
result = wrapped_invoke(pregel, test_state)
1388-
1389-
assert result is not None
1390-
1391-
spans = [item.payload for item in items if item.type == "span"]
1392-
invoke_spans = [
1393-
span
1394-
for span in spans
1395-
if span["attributes"].get("sentry.op") == OP.GEN_AI_INVOKE_AGENT
1396-
]
1397-
assert len(invoke_spans) > 0
1398-
1399-
invoke_span = invoke_spans[0]
1400-
assert SPANDATA.GEN_AI_REQUEST_MESSAGES in invoke_span["attributes"]
1401-
1402-
messages_data = invoke_span["attributes"][SPANDATA.GEN_AI_REQUEST_MESSAGES]
1403-
assert isinstance(messages_data, str)
1404-
1405-
parsed_messages = json.loads(messages_data)
1406-
assert isinstance(parsed_messages, list)
1407-
assert len(parsed_messages) == 1
1408-
assert "small message 5" in str(parsed_messages[0])
1409-
1410-
(tx,) = (item.payload for item in items if item.type == "transaction")
1411-
assert tx["_meta"]["spans"]["0"]["data"]["gen_ai.request.messages"][""]["len"] == 5

0 commit comments

Comments
 (0)