framework label
saying which platform produced it, and that one label powers the Live Traces framework filter,
the framework badge on every trace row, and Monitor’s Platforms chart (root traces per
platform over time).
The label resolves in priority order - strongest wins:
1. Explicit: name your platform yourself
Any string is a valid platform. This is how platforms without an AgentX integration get first-class treatment:my-inhouse-runner now appears in the framework filter, on trace rows, and as its own series
in the Platforms chart - exactly like a built-in. Labels are folded to lowercase and truncated
to 64 characters on ingest, so "LangChain" and "langchain" group as one platform.
2. Integrations: automatic literals
Every AgentX integration stamps its platform automatically - no parameter needed:
A patched provider client running inside a span you opened yourself stamps its provider
literal onto that span too (an explicit
framework= or a framework integration’s label always
wins over it).
For OpenTelemetry ingest, the label comes from the OTel signal itself:
gen_ai.provider.name, then gen_ai.system, then the instrumentation scope name, then
service.name, then the literal otel. See OpenTelemetry.
3. Auto-detection: plain traces label themselves
A plain@tracer.trace(...) with no framework= and no integration in play looks at which
known orchestration framework is actually imported in the process (imported, not merely
installed) and labels the span when exactly one is loaded:
LangChain/LangGraph, CrewAI, LlamaIndex, AutoGen, OpenAI Agents SDK, Google ADK, Semantic
Kernel, Haystack, Pydantic AI, smolagents, DSPy.
Ambiguous (several loaded) or unknown means no label - the trace still ingests normally
and buckets as “Other / custom” in the dashboard. The SDK never guesses: unlabeled beats
mislabeled. Raw provider SDKs (openai, anthropic, …) are deliberately not detected this
way - they are dependencies of nearly every framework, so their presence proves nothing about
what orchestrates the agent.
Where the label shows up
- Live Traces: a framework badge on every row, plus a multi-select framework filter, and a
server-side
GET /ingest/traces?framework=...filter. - Monitor → Platforms chart: root traces per platform per time bucket
(
byFrameworkon each bucket ofGET /agent-monitoring/metrics,frameworkswindow totals,facets.frameworkssuggestions, and aframework=query filter). Unlabeled and beyond-top-N platforms chart as “Other / custom” - every trace is always accounted for. - Custom evaluator webhooks: the sampled trace’s
frameworkrides along in the payload.

