What are the OpenTelemetry GenAI semantic conventions?

They’re a shared vocabulary for describing an LLM call, a tool call, or an agent step as a span, so a trace from one framework means the same thing as a trace from another and a backend can read both without a per-framework adapter. Each span carries gen_ai.operation.name, one of a fixed set of values like chat, embeddings, execute_tool, and invoke_agent, plus the provider and model name and token counts for an LLM call, or the tool’s name and call id for a tool call. Grouping related spans into one conversation uses gen_ai.conversation.id, populated only when the framework actually has one to give, never a generated fallback.

None of it is stable yet. Every GenAI span, metric, and attribute still carries OpenTelemetry’s “development” marker, and a name has already changed once: gen_ai.system became gen_ai.provider.name. Anything reading these fields today has to tolerate that churn rather than assume today’s names survive the next revision.

sources

keep reading

More on this.

Two ways to run Tessary.

Tessary is an open-source agent reliability platform. Cloud and self-hosted run the same workflow on the OpenTelemetry traces your agent already emits.

Tessary Cloud

We host it for you. Send your first trace with nothing to deploy and no model key.

what's includedper organization
traces
10,000 per calendar month
stored trace data
1 GB
retention
30 days
model credit
$10, one-time, for triage and root-cause analysis
credit card
not required

Self-hosted Tessary

Run the open-source code on your own infrastructure with one command. Add your own model key for triage and root-cause analysis.

Self-host Tessary for me by following https://github.com/tessaryai/tessary/blob/main/setup.md

docker compose -f oci://docker.io/tessaryai/tessary:compose up -d -y