The OpenTelemetry integration used to export your AI gateway traffic as flat HTTP spans. It now exports what your observability backend actually wants: agent traces.
Span trees instead of span soup — Requests that share a trace get a proper root span, with every LLM call nested underneath and named by its label. An eight-step agent run shows up in Jaeger, Grafana, or Datadog as a tree named after your agent — not eight disconnected POST /v1/messages entries.
Tool calls as typed child spans — Every tool call Grepture extracts from your traffic becomes an execute_tool span under the LLM call that emitted it, with tool name, call id, status, and real execution timing. Arguments and results are included when body export is enabled.
Full gen_ai semantic conventions — Spans now carry gen_ai.operation.name, request and response model (they differ when you use aliases), input/output token counts, agent name, and the estimated cost of each call as grepture.cost_usd — the same calculation the dashboard uses.
W3C trace context — If your app is already instrumented with OpenTelemetry, just let the traceparent header flow through the gateway. Exported spans attach to your existing distributed trace instead of starting a new one.
Example export, no setup required — A new download button on the integrations page generates an OTLP payload from your last 100 logs on the fly. Inspect exactly what would land in your backend before you configure anything.