fix(otel): fix double-serialization of span attributes#493
Open
simonvdk-mistral wants to merge 1 commit intomainfrom
Open
fix(otel): fix double-serialization of span attributes#493simonvdk-mistral wants to merge 1 commit intomainfrom
simonvdk-mistral wants to merge 1 commit intomainfrom
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problem
gen_ai.input.messages,gen_ai.output.messages, andgen_ai.tool.definitionsspan attributes were double-serialized. Each message/definition was individuallyjson.dumps()-ed into alist[str], which the OTEL exporter then serialized again on export, producing escaped JSON:A minor related issue:
gen_ai.tool.call.resultwas unconditionallyjson.dumps()-ed without checking if the value was already a string.Fix
Per the OTEL GenAI semantic conventions, these attributes are typed
anyand should be recorded as a single JSON string when structured attributes are not supported on spans (which is the case for the Python OTEL SDK today).serialize_*->format_*) now returndictinstead ofstrotel.pycollect intolist[dict], then do a singlejson.dumps()per attributegen_ai.tool.call.resultnow has anisinstance(str)guard matchingtool.call.argumentsserialization.py->formatting.pyto reflect that these functions format, not serializeReferences