Skip to content

Commit 8449df8

Browse files
swa-knellipsis-dev[bot]nirga
authored
fix(sagemaker): Improve _handle_call to safely parse JSON, CSV, and byte inputs (#2963)
Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com> Co-authored-by: Nir Gazit <[email protected]>
1 parent c2c1697 commit 8449df8

File tree

1 file changed

+18
-3
lines changed
  • packages/opentelemetry-instrumentation-sagemaker/opentelemetry/instrumentation/sagemaker

1 file changed

+18
-3
lines changed

packages/opentelemetry-instrumentation-sagemaker/opentelemetry/instrumentation/sagemaker/__init__.py

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -145,16 +145,31 @@ def stream_done(response_body):
145145
response["Body"] = StreamingWrapper(response["Body"], stream_done)
146146

147147

148+
def _try_parse_json(value):
149+
"""Try to decode JSON if it's a string or bytes; fallback to raw value."""
150+
try:
151+
if isinstance(value, bytes):
152+
value = value.decode("utf-8").strip()
153+
if isinstance(value, str):
154+
return json.loads(value)
155+
return value
156+
except (json.JSONDecodeError, UnicodeDecodeError):
157+
return str(value)
158+
159+
148160
@dont_throw
149161
def _handle_call(span, kwargs, response):
150162
response["Body"] = ReusableStreamingBody(
151163
response["Body"]._raw_stream, response["Body"]._content_length
152164
)
153-
request_body = json.loads(kwargs.get("Body"))
154-
response_body = json.loads(response.get("Body").read())
155165

156-
endpoint_name = kwargs.get("EndpointName")
166+
raw_request = kwargs.get("Body")
167+
raw_response = response["Body"].read()
157168

169+
request_body = _try_parse_json(raw_request)
170+
response_body = _try_parse_json(raw_response)
171+
172+
endpoint_name = kwargs.get("EndpointName")
158173
_set_span_attribute(span, SpanAttributes.LLM_REQUEST_MODEL, endpoint_name)
159174
_set_span_attribute(
160175
span, SpanAttributes.TRACELOOP_ENTITY_INPUT, json.dumps(request_body)

0 commit comments

Comments
 (0)