Skip to main content
Manually instrumenting your generative AI apps using language-agnostic OpenTelemetry tooling gives you full control over your instrumentation while ensuring compatibility with Axiom’s LLM observability features.
Alternatively, instrument your app with Axiom AI SDK. For more information on instrumentation approaches, see LLM observability.
For more information on sending OpenTelemetry data to Axiom, see Send OpenTelemetry data to Axiom for examples in multiple languages.

Required attributes

Axiom’s conventions for AI spans are based on version 1.37 of the OpenTelemetry semantic conventions for generative client AI spans. Axiom requires the following attributes in your data to properly recognize your spans:
  • gen_ai.operation.name identifies AI spans. It’s also a required attribute in the OpenTelemetry specification.
  • gen_ai.capability.name provides context about the specific capability being used within the AI operation.
  • gen_ai.step.name allows you to break down the AI operation into individual steps for more granular tracking.

gen_ai.operation.name

Axiom currently provides custom UI for the following operations related to the gen_ai.operation.name attribute:
  • chat: Chat completion
  • execute_tool: Tool execution
Other possible values include:
  • generate_content: Multimodal content generation
  • embeddings: Vector embeddings
  • create_agent: Create AI agents
  • invoke_agent: Invoke existing agents
  • text_completion: Text completion. This is a legacy value and has been deprecated by OpenAI and many other providers.
For more information, see the OpenTelemetry documentation on GenAI Attributes. Axiom recommends the following attributes to get the most out of Axiom’s AI telemetry features:

axiom.gen_ai attributes

  • axiom.gen_ai.schema_url: Schema URL for the Axiom AI conventions. For example: https://axiom.co/ai/schemas/0.0.2
  • axiom.gen_ai.sdk.name: Name of the SDK. For example: my-ai-instrumentation-sdk
  • axiom.gen_ai.sdk.version: Version of the SDK. For example: 1.2.3

Chat spans

Tool spans

For tool operations (execute_tool), include these additional attributes: For more information, see GenAI Attributes.

Agent spans

For agent operations (create_agent, invoke_agent), include these additional attributes:

Span naming

Ensure span names follow the OpenTelemetry conventions for generative AI spans. For example, the suggested span names for common values of gen_ai.operation.name are the following:
  • chat {gen_ai.request.model}
  • execute_tool {gen_ai.tool.name}
  • embeddings {gen_ai.request.model}
  • generate_content {gen_ai.request.model}
  • text_completion {gen_ai.request.model}
  • create_agent {gen_ai.agent.name}
  • invoke_agent {gen_ai.agent.name}
For more information, see the OpenTelemetry documentation on span naming:

Messages

Messages support four different roles, each with specific content formats. They follow OpenTelemetry’s structured format:

System messages

System messages are messages that the system adds to set the behavior of the assistant. They typically contain instructions or context for the AI model.

User messages

User messages are messages that users send to the AI model. They typically contain questions, commands, or other input from the user.

Assistant messages

Assistant messages are messages that the AI model sends back to the user. They typically contain responses, answers, or other output from the model.

Tool messages

Tool messages are messages that contain the results of tool calls made by the AI model. They typically contain the output or response from the tool.

Content part types

  • text: Text content with content field
  • tool_call: Tool invocation with id, name, arguments
  • tool_call_response: Tool result with id, response
For more information, see the OpenTelemetry documentation:

Example trace structure

Chat completion

Example of a properly structured chat completion trace:

Tool execution

Example of a tool execution within an agent:

What’s next?

After sending traces with the proper semantic conventions: