Are LLM prompts and completions captured by OpenTelemetry's GenAI conventions by default?
No. Capturing what the model actually saw and said is opt-in: gen_ai.input.messages and gen_ai.output.messages both carry an explicit “Opt-In” requirement level in the spec, so a compliant instrumentation library ships with them off, and turning either one on is a decision you make rather than a default you inherit. The rest of a span, the operation name, the provider, the model, the token counts, is captured regardless.
The spec is direct about why: both attributes are flagged as likely to carry sensitive information, including user PII. How they get recorded once you enable them depends on where they land. On a span they’re written as attributes and can fall back to a JSON string if the backend doesn’t support structured values; on an event, structured form is required. Instrumentations are also allowed to filter or truncate the content before emitting it, so opt-in doesn’t mean all-or-nothing once it’s on. Deciding what content leaves an agent’s traces is instrumentation’s job generally; message content is where that decision gets its own explicit switch in the GenAI spec.