Skip to main content

ATI CrewAI integration: agent/task lifecycle hooks -> ATI spans

Project description

ATI Integration for CrewAI

This package provides OpenTelemetry instrumentation for CrewAI agents using Iocane ATI.

It automatically captures:

  • Agent execution: Task assignments, inputs, outputs, and execution time.
  • Crew orchestration: The overall planning and delegation flow.

Installation

pip install ati-integrations-crewai opentelemetry-sdk opentelemetry-exporter-otlp

Configuration

Set the standard OpenTelemetry environment variables to point to your Iocane collector:

export OTEL_EXPORTER_OTLP_ENDPOINT="https://api.iocane.ai/v1/traces"
export OTEL_EXPORTER_OTLP_HEADERS="x-iocane-key=YOUR_KEY,x-ati-env=YOUR_ENV_ID"
export OTEL_SERVICE_NAME="my-crewai-agent"

Usage

Here is the robust pattern for instrumenting CrewAI scripts.

Important: Because CrewAI or other libraries might initialize OpenTelemetry internally, it is best practice to attempt to set the provider, but always retrieve the active global provider to attach your exporters.

import os
from ati_crewai import CrewAIInstrumentor
from crewai import Agent, Crew, Process, Task
from langchain_openai import ChatOpenAI

# OpenTelemetry Imports
from opentelemetry import trace
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.resources import Resource, SERVICE_NAME
from opentelemetry.sdk.trace.export import BatchSpanProcessor
from opentelemetry.exporter.otlp.proto.http.trace_exporter import OTLPSpanExporter

def main():
    # 1. Configure OpenTelemetry (Robust Pattern)
    resource = Resource.create(attributes={SERVICE_NAME: "my-crew-service"})
    
    try:
        # Try to set the global provider
        provider = TracerProvider(resource=resource)
        trace.set_tracer_provider(provider)
    except Exception:
        # If it fails (e.g., already set), ignore and fetch the active one below
        pass

    # ALWAYS get the global provider to ensure we attach to the active pipeline
    provider = trace.get_tracer_provider()

    # 2. Configure Exporter (Iocane)
    # Ensure usage of the correct endpoint from env or default
    endpoint = os.environ.get("OTEL_EXPORTER_OTLP_ENDPOINT")
    if endpoint and endpoint.endswith("/v1/traces"):
        exporter = OTLPSpanExporter(endpoint=endpoint)
    else:
        exporter = OTLPSpanExporter()
        
    # Check if the provider supports add_span_processor (it typically does)
    if hasattr(provider, "add_span_processor"):
        provider.add_span_processor(BatchSpanProcessor(exporter))
    else:
        print("WARNING: TracerProvider does not support add_span_processor.")

    # 3. Instrument CrewAI
    CrewAIInstrumentor().instrument()

    try:
        # 4. Your CrewAI Code
        llm = ChatOpenAI(model="gpt-3.5-turbo", temperature=0)
        
        agent = Agent(role='Researcher', goal='...', backstory='...', llm=llm)
        task = Task(description='...', agent=agent, expected_output='...')
        crew = Crew(agents=[agent], tasks=[task], verbose=True)

        result = crew.kickoff()
        print(result)

    finally:
        # 5. Uninstrument and Flush
        CrewAIInstrumentor().uninstrument()
        if hasattr(provider, "shutdown"):
            provider.shutdown()

if __name__ == "__main__":
    main()

Environment Variables for Instrumentation

Variable Description Default
ATI_CAPTURE_PAYLOADS set to true to capture task descriptions and results as span events false

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ati_integrations_crewai-0.1.1.tar.gz (7.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

ati_integrations_crewai-0.1.1-py3-none-any.whl (4.1 kB view details)

Uploaded Python 3

File details

Details for the file ati_integrations_crewai-0.1.1.tar.gz.

File metadata

  • Download URL: ati_integrations_crewai-0.1.1.tar.gz
  • Upload date:
  • Size: 7.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.2

File hashes

Hashes for ati_integrations_crewai-0.1.1.tar.gz
Algorithm Hash digest
SHA256 70177b0c93bcfc4e344e3c7d04131e69f5f61ebe1d5c8822f165d9c6970d61d3
MD5 3797795d60678765f9860d8bfc4b9fce
BLAKE2b-256 f5b32c84dc6415cc5bb502c523375e3db8e42945ed8bdb1ddfec951e84c8235d

See more details on using hashes here.

File details

Details for the file ati_integrations_crewai-0.1.1-py3-none-any.whl.

File metadata

File hashes

Hashes for ati_integrations_crewai-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 8a8dc4d8d914d7b47865780292ed23a95c4591bd328d87a69016ce3434a69d87
MD5 51d5aec85a2c434e3de342c2044fe265
BLAKE2b-256 8f7d346fdd3c4a0dc666148eb4ee1d8e863a43b6b0fc0a6eb309df437fa87248

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page