CrewAI

Braintrust traces CrewAI applications via OpenTelemetry.

This integration uses Braintrust's Python SDK configuration for OpenTelemetry.

uv add braintrust[otel] crewai opentelemetry-instrumentation-openai opentelemetry-instrumentation-crewai python-dotenv

To trace CrewAI spans with Braintrust, configure these environment variables:

.env
BRAINTRUST_API_KEY=your-api-key
BRAINTRUST_PARENT=project_name:crewai-demo
OPENAI_API_KEY=your-openai-key

When you create your crew, enable telemetry and export the data using OpenTelemetry:

crewai_braintrust.py
import os
from typing import Any, Dict
 
from braintrust.otel import BraintrustSpanProcessor
from crewai import Agent, Crew, Task
from crewai.llm import LLM
from opentelemetry import trace
from opentelemetry.instrumentation.crewai import CrewAIInstrumentor
from opentelemetry.instrumentation.openai import OpenAIInstrumentor
from opentelemetry.sdk.trace import TracerProvider
 
 
def setup_tracing() -> None:
    current_provider = trace.get_tracer_provider()
    if isinstance(current_provider, TracerProvider):
        provider = current_provider
    else:
        provider = TracerProvider()
        trace.set_tracer_provider(provider)
 
    provider.add_span_processor(BraintrustSpanProcessor())
    CrewAIInstrumentor().instrument(tracer_provider=provider)
    OpenAIInstrumentor().instrument(tracer_provider=provider)
 
 
def create_simple_crew() -> Crew:
    """Create a simple crew with a software developer agent."""
    llm = LLM(model="gpt-4o-mini")
 
    coder = Agent(
        role="Software developer",
        goal="Write clear, concise code on demand",
        backstory="An expert coder with a keen eye for software trends.",
        verbose=True,
        llm=llm,
    )
 
    task = Task(
        description="Define the HTML for making a simple website with heading- Hello World! Braintrust monitors your CrewAI agent!",
        expected_output="A clear and concise HTML code",
        agent=coder,
    )
 
    crew = Crew(
        agents=[coder],
        tasks=[task],
        verbose=True,
    )
 
    return crew
 
 
def run_crew() -> Dict[str, Any]:
    crew = create_simple_crew()
    result = crew.kickoff()
 
    return {
        "result": str(result),
        "agents_count": len(crew.agents),
        "tasks_count": len(crew.tasks),
    }
 
 
if __name__ == "__main__":
    setup_tracing()
 
    tracer = trace.get_tracer("crewai-demo-bot")
    with tracer.start_as_current_span("run_crew"):
        result = run_crew()

On this page

CrewAI - Docs - Braintrust