Add Attributes, Metadata and Tags to Span
You might want to track additional application details manually. This is particularly useful for actions outside standard frameworks or LLM clients.
Add attributes to a span
Attributes let you attach key/value pairs to a spans so it carries more information about the current operation that it's tracking.
Notice that the attributes have a specific prefix operation
. When adding custom attributes, it's best practice to vendor your attributes (e.x. mycompany.
) so that your attributes do not clash with semantic conventions.
Add attributes tied to semantic conventions
Semantic Conventions provides a structured schema to represent common LLM application attributes. These are well known names for items like messages, prompt templates, metadata, and more. We've built a set of semantic conventions as part of the OpenInference package.
Setting attributes is crucial for understanding the flow of data and messages through your LLM application, which facilitates easier debugging and analysis. By setting attributes such as OUTPUT_VALUE
and OUTPUT_MESSAGES
, you can capture essential output details and interaction messages within the context of a span. This allows you to record the response and categorize and store messages exchanged by components in a structured format, which is used in Arize to help you debug your application.
To use OpenInference Semantic Attributes in Python, ensure you have the semantic conventions package:
Then run the following to set semantic attributes:
Add attributes to multiple spans at once
You can set attributes once to OpenTelemetry Context, and our tracing integrations will attempt to pass these attributes to all other spans underneath a parent trace.
Supported Context Attributes include:
Metadata: Metadata associated with a span.
Tags: List of tags to give the span a category.
Session ID: Unique identifier for a session.
User ID: identifier for a user.
Prompt Template:
Template: Used to generate prompts as Python f-strings.
Version: The version of the prompt template.
Variables: key-value pairs applied to the prompt template.
Here are the functions we support to add attributes to context.
using_metadata
using_metadata
Context manager to add metadata to the current OpenTelemetry Context. OpenInference auto instrumentators will read this Context and pass the metadata as a span attribute, following the OpenInference semantic conventions. Its input, the metadata, must be a dictionary with string keys. This dictionary will be serialized to JSON when saved to the OTEL Context and remain a JSON string when sent as a span attribute.
It can also be used as a decorator:
using_tags
using_tags
Context manager to add tags to the current OpenTelemetry Context. OpenInference auto instrumentators will read this Context and pass the tags as a span attribute, following the OpenInference semantic conventions. ts input, the tag list, must be a list of strings.
It can also be used as a decorator:
using_prompt_template
using_prompt_template
Context manager to add a prompt template (including its version and variables) to the current OpenTelemetry Context. OpenInference auto instrumentators will read this Context and pass the prompt template fields as span attributes, following the OpenInference semantic conventions. Its inputs must be of the following type:
Template: non-empty string.
Version: non-empty string.
Variables: a dictionary with string keys. This dictionary will be serialized to JSON when saved to the OTEL Context and remain a JSON string when sent as a span attribute.
It can also be used as a decorator:
using_attributes
using_attributes
Context manager to add attributes to the current OpenTelemetry Context. OpenInference auto instrumentators will read this Context and pass the attributes fields as span attributes, following the OpenInference semantic conventions. This is a convenient context manager to use if you find yourself using many of the previous ones in conjunction.
The previous example is equivalent to doing the following, making using_attributes
a very convenient tool for the more complex settings.
It can also be used as a decorator:
get_attributes_from_context
get_attributes_from_context
Our OpenInference core instrumentation package offers a convenience function, get_attributes_from_context
, to read the context attributes set above from OTEL context.
In the following example, we assume the following are set in the OTEL context:
We then use get_attributes_from_context
to extract them from the OTEL context. You can use it in your manual instrumentation to attach these attributes to your spans.
Last updated