OpenTelemetry GenAI semantic conventions — canonical span tree span tree with GenAI attributes invoke_agent research_bot [INTERNAL] gen_ai.agent.name, gen_ai.provider.name, gen_ai.request.model chat gen_ai.operation.name=chat gen_ai.response.model if it differs from request tool_call search_tool gen_ai.tool.name, gen_ai.data_source.id chat (continuation turn) chat (final answer) content capture — opt-in only gen_ai.input.messages.reference_id gen_ai.output.messages.reference_id gen_ai.system_instructions (if opt-in) external store: S3, SQLite, log pipeline stays out of span body; PII-safe span kinds + technology specific CLIENT: remote agent services (Assistants, Bedrock) INTERNAL: in-process (LangChain, CrewAI, local ReAct) per-provider conventions: Anthropic, Azure AI, Bedrock, OpenAI Datadog v1.37+ maps natively OTEL_SEMCONV_STABILITY_OPT_IN=gen_ai_latest_experimental spec: opentelemetry.io/docs/specs/semconv/gen-ai/ — most conventions still experimental (Mar 2026).