python --version
pip install opentelemetry-sdk opentelemetry-exporter-otlp openai
export OPENAI_API_KEY=sk-...
Add OpenTelemetry distributed tracing to your LLM application, capturing spans for each LLM call with token usage and model attributes.
1 from opentelemetry import trace 2 from opentelemetry.sdk.trace import TracerProvider 3 from opentelemetry.sdk.trace.export import ConsoleSpanExporter, BatchSpanProcessor 4 from openai import OpenAI 5 6 # Setup OTEL 7 provider = TracerProvider() 8 provider.add_span_processor(BatchSpanProcessor(ConsoleSpanExporter())) 9 trace.set_tracer_provider(provider) 10 tracer = trace.get_tracer("llm-app", "1.0.0") 11 12 client = OpenAI() 13 14 def traced_chat(message: str, model: str = "gpt-4o-mini") -> str: 15 with tracer.start_as_current_span("llm.chat.completions") as span: 16 span.set_attribute("llm.model", model) 17 span.set_attribute("llm.input", message[:200]) 18 19 try: 20 resp = client.chat.completions.create( 21 model=model, 22 messages=[{"role": "user", "content": message}], 23 ) 24 usage = resp.usage 25 span.set_attribute("llm.input_tokens", usage.prompt_tokens) 26 span.set_attribute("llm.output_tokens", usage.completion_tokens) 27 span.set_attribute("llm.total_tokens", usage.total_tokens) 28 content = resp.choices[0].message.content or "" 29 span.set_attribute("llm.status", "success") 30 return content 31 except Exception as e: 32 span.record_exception(e) 33 span.set_status(trace.StatusCode.ERROR, str(e)) 34 raise 35 36 if __name__ == "__main__": 37 answer = traced_chat("What is OpenTelemetry?") 38 print(answer) 39
Sign in to share your feedback and join the discussion.