Do agent traces have to use the OpenTelemetry GenAI attribute format?
No. OpenTelemetry’s GenAI semantic conventions, the gen_ai.* attributes, are the closest thing agent telemetry has to a standard, but two other dialects describe the same events under different names. OpenInference spells a model call llm.model_name and an agent step openinference.span.kind. Traceloop’s OpenLLMetry writes prompts and completions as indexed attributes, gen_ai.prompt.0.content and gen_ai.completion.0.content, which OpenTelemetry has since deprecated in its own conventions in favor of a structured gen_ai.input.messages. All of these are naming the identical thing, an LLM call or a tool call, just spelling its fields differently. What matters more than which dialect you emit is that whatever reads your traces knows how to normalize between them, because a mixed fleet, one framework on gen_ai.*, another on OpenInference, is common once an org runs more than one agent. Pick gen_ai.* if you’re instrumenting from scratch. It’s the one the other conventions are converging on.