When the register_otel function does not offer enough customization for your needs, you can use the opentelemetry_sdk to control how you send traces.
Here is an example of all of the different customizations we offer using opentelemetry.
Set the authentication for sending data to Arize using environment variables
Set the model ID and model version as resource attributes
Add multiple locations for exporting data, including the console.
Below is some sample python code below on setting up the auto instrumentation before starting the OpenAI auto instrumentor.
import os
# Import open-telemetry dependencies
from opentelemetry import trace as trace_api
from opentelemetry.exporter.otlp.proto.grpc.trace_exporter import OTLPSpanExporter
from opentelemetry.sdk import trace as trace_sdk
from opentelemetry.sdk.trace.export import ConsoleSpanExporter, SimpleSpanProcessor
from opentelemetry.sdk.resources import Resource
# Import the automatic instrumentor from OpenInference
from openinference.instrumentation.openai import OpenAIInstrumentor
# Set the Space and API keys as headers for authentication
headers = f"space_key={ARIZE_SPACE_KEY},api_key={ARIZE_API_KEY}"
os.environ['OTEL_EXPORTER_OTLP_TRACES_HEADERS'] = headers
# Set resource attributes for the name and version for your application
resource = Resource(
attributes={
"model_id":"openai-llm-tracing", # Set this to any name you'd like for your app
"model_version":"1.0", # Set this to a version number string
}
)
# Define the desired endpoint URL to send traces
endpoint = "https://otlp.arize.com/v1"
# Set the tracer provider
tracer_provider = trace_sdk.TracerProvider(resource=resource)
tracer_provider.add_span_processor(SimpleSpanProcessor(OTLPSpanExporter(endpoint)))
tracer_provider.add_span_processor(SimpleSpanProcessor(ConsoleSpanExporter()))
trace_api.set_tracer_provider(tracer_provider=tracer_provider)
# Finish automatic instrumentation
OpenAIInstrumentor().instrument()