Conversation
… keys The adapters previously routed non-object tool arguments/results to vendor flue.tool.call.* fallback keys, on a reading of the GenAI semconv as object-shaped-only. At the pinned revision the spec types these attributes `any`: instrumentations SHOULD best-effort deserialize serialized strings, and on spans the value MAY be recorded as a JSON string when a structured format is not supported — which is the case for every OTel span attribute store. Since objects were already JSON-stringified at emission, the fork changed nothing but the key, and consumers that read the semconv keys (Sentry's AI views among them) never saw tool results: most tools — including every MCP tool — return strings. Both backends now always record under gen_ai.tool.call.*, with best-effort JSON deserialization of string payloads per the spec guidance. The flue.tool.call.* keys are removed (extension revision 5). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
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.
Summary
gen_ai.tool.call.*for every payload shape; drop theflue.tool.call.*fallback keys (FLUE_TELEMETRY_EXTENSION_REVISION→ 5).@flue/opentelemetryREADME and the ecosystem docs page.Why
Fixes #568. String tool results — every MCP tool, most local tools — landed on vendor keys no backend reads, so consumers of the semconv keys showed tool inputs with no outputs. The spec types these attributes
anyand sanctions JSON-string form on spans; the adapters already stringify objects, so the object-only fork changed nothing but the key.Considered and skipped: dual-writing
flue.tool.call.*for a deprecation window. Both keys draw from the same per-span content pool (sized against workerd's 64 KiB span-attribute cap), so duplicating the largest payloads in the system would make truncation kick in twice as early. Easy to switch if you'd rather keep a compat window.Verification
pnpm exec turbo run build --filter=@flue/runtime --filter=@flue/opentelemetry— passpnpm -w exec tsc --noEmit -p packages/runtime/-p packages/opentelemetry— cleanbiome linton the four changed source files — clean (@flue/runtimehas no vitest files to run)'hello'records as-is ongen_ai.tool.call.result;'{"a":1}'and{a: 1}record structuredexecute_toolspan (MCP tools included) carriesgen_ai.tool.call.resultand renders in the AI trace views🤖 Generated with Claude Code