Which attributes should an agent emit on an LLM span?

A chat span has exactly two required attributes: gen_ai.operation.name and gen_ai.provider.name. Everything else scales down from there. gen_ai.request.model is conditionally required, only when it’s actually available, and most of the rest, token counts, max tokens, temperature, stop sequences, the response id and finish reasons, are recommended rather than required, so a compliant span can drop any of them and still validate. gen_ai.conversation.id is conditionally required too, but only when the instrumented framework has a real conversation id to hand over; nothing generates one as a fallback.

Content sits in a stricter tier on its own. gen_ai.input.messages, gen_ai.output.messages, gen_ai.system_instructions, and gen_ai.tool.definitions are opt-in rather than recommended, each carrying an explicit spec warning that it’s likely to hold PII. Token counts carry no such warning and ship as recommended by default, the same usage numbers Tessary’s cost_drift classifier attaches as evidence when a call site’s spend moves.

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