Skip to content

Commit 1b4c591

Browse files
authored
fix: de-dot gRPC message.* spanevent attrs to prevent GenAI event mapping conflict\n\n- Add spanevent transform rules in otel-collector to rename message.type,\n message.id, message.uncompressed_size to message_type, message_id,\n message_uncompressed_size. This prevents OpenSearch mapping conflicts\n between gRPC message events (object) and GenAI events (string).\n- Enable OTEL_SEMCONV_STABILITY_OPT_IN=gen_ai_latest_experimental in\n Strands code-assistant example for structured gen_ai.input.messages\n and gen_ai.output.messages on trace events. (opensearch-project#90)
1 parent 4c3a941 commit 1b4c591

2 files changed

Lines changed: 19 additions & 0 deletions

File tree

docker-compose/otel-collector/config.yaml

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,19 @@ processors:
6262
- delete_key(attributes, "app.ads.contextKeys")
6363
- set(attributes["rpc_system"], attributes["rpc.system"]) where attributes["rpc.system"] != nil
6464
- delete_key(attributes, "rpc.system")
65+
- context: spanevent
66+
statements:
67+
# De-dot gRPC message.* event attributes to prevent mapping conflict with
68+
# GenAI event attributes where "message" is a plain string value.
69+
# Without this, flagd's message.type/message.id/message.uncompressed_size
70+
# create an object mapping for events.attributes.message, which conflicts
71+
# with GenAI spans that use events.attributes.message as a string.
72+
- set(attributes["message_type"], attributes["message.type"]) where attributes["message.type"] != nil
73+
- delete_key(attributes, "message.type")
74+
- set(attributes["message_id"], attributes["message.id"]) where attributes["message.id"] != nil
75+
- delete_key(attributes, "message.id")
76+
- set(attributes["message_uncompressed_size"], attributes["message.uncompressed_size"]) where attributes["message.uncompressed_size"] != nil
77+
- delete_key(attributes, "message.uncompressed_size")
6578
log_statements:
6679
- context: log
6780
statements:

examples/strands/code-assistant/main.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,12 @@
3333
# This provides better visibility into tool calls during development
3434
os.environ["STRANDS_TOOL_CONSOLE_MODE"] = "enabled"
3535

36+
# Opt-in to latest GenAI semantic conventions (v1.37+) for richer trace data:
37+
# - gen_ai.input.messages / gen_ai.output.messages on events (structured I/O)
38+
# - gen_ai.provider.name instead of gen_ai.system
39+
# Also include tool definitions in traces for eval-ready spans.
40+
os.environ["OTEL_SEMCONV_STABILITY_OPT_IN"] = "gen_ai_latest_experimental,gen_ai_tool_definitions"
41+
3642
# ============================================================================
3743
# OPENTELEMETRY SETUP - OTLP EXPORTER CONFIGURATION
3844
# ============================================================================

0 commit comments

Comments
 (0)