Skip to main content

Overview

Pydantic AI emits OpenTelemetry (OTel) spans for agent runs, model calls, and tool execution. By configuring an OTLP exporter, you can send those traces directly to Laminar. If you want more detail on OTel exporters, endpoints, or self-hosted settings, see the OpenTelemetry guide.

Getting Started

1. Install dependencies

pip install "pydantic-ai-slim[openai]" opentelemetry-sdk opentelemetry-exporter-otlp python-dotenv

2. Set environment variables

# .env or environment
LMNR_PROJECT_API_KEY=your-laminar-project-api-key
OPENAI_API_KEY=your-openai-api-key

3. Configure OpenTelemetry and enable instrumentation

This example uses the OTLP/gRPC exporter, which Laminar recommends for reliability and performance.
import os

from dotenv import load_dotenv
from opentelemetry.exporter.otlp.proto.grpc.trace_exporter import OTLPSpanExporter
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import BatchSpanProcessor
from opentelemetry.trace import set_tracer_provider

from pydantic_ai import Agent

load_dotenv()
project_api_key = os.getenv("LMNR_PROJECT_API_KEY")
if not project_api_key:
    raise RuntimeError("LMNR_PROJECT_API_KEY is not set")

exporter = OTLPSpanExporter(
    endpoint="https://api.lmnr.ai:8443/v1/traces",
    headers={"authorization": f"Bearer {project_api_key}"},
)
tracer_provider = TracerProvider()
tracer_provider.add_span_processor(BatchSpanProcessor(exporter))
set_tracer_provider(tracer_provider)

Agent.instrument_all()

agent = Agent("openai:gpt-4.1-mini")
result = agent.run_sync("What is the capital of France?")
print(result.output)
The authorization header must be lowercase when using the gRPC exporter.
Once instrumentation is enabled, Laminar will display traces for each agent run and underlying model/tool calls.