CrewAI Observe
A Python package that seamlessly adds Langfuse tracing capabilities to CrewAI workflows without disrupting existing functionality. Monitor your AI agents, track token usage, and gain deep observability into your CrewAI executions.
Features
- Seamless Integration: Drop-in replacement for CrewAI crew execution
- Complete Observability: Track LLM calls, token usage, and agent thoughts
- Environment-Based Toggling: Enable/disable tracing via environment variables
- Production Ready: Comprehensive error handling and validation
- Rich Metadata: Associate traces with sessions, users, and custom metadata
- Multiple Interfaces: Function-based, class-based, and decorator approaches
- Async & Sync Support: Works with both synchronous and asynchronous CrewAI operations
- Graceful Degradation: Continues to work even when Langfuse is unavailable
Installation
# Basic installation
pip install crewai-observe
# With development dependencies
pip install crewai-observe[dev]
Configuration
Set up your environment variables to enable Langfuse tracing:
# Required: Enable Langfuse tracing
export LANGFUSE_ENABLED=1
# Required: Langfuse credentials
export LANGFUSE_SECRET_KEY="your-secret-key"
export LANGFUSE_PUBLIC_KEY="your-public-key"
export LANGFUSE_HOST="https://your-langfuse-instance.com"
# Optional: Advanced configuration
export LANGFUSE_SAMPLE_RATE=0.1 # Sample 10% of traces
export LANGFUSE_FLUSH_INTERVAL=2000 # Flush every 2 seconds
If LANGFUSE_ENABLED is not set to "1", the package will execute CrewAI crews normally without any tracing overhead.
Quick Start
Basic Usage
import asyncio
from crewai import Crew, Agent, Task
from crewai_langfuse import execute_crew_with_tracing
# Create your CrewAI setup as usual
agent = Agent(
role="Data Analyst",
goal="Analyze data and provide insights",
backstory="You are an experienced data analyst..."
)
task = Task(
description="Analyze the provided dataset",
agent=agent
)
crew = Crew(agents=[agent], tasks=[task])
# Execute with Langfuse tracing
async def main():
result = await execute_crew_with_tracing(
crew=crew,
inputs={"dataset": "sales_data.csv"},
span_name="data-analysis-crew",
session_id="session-123",
user_id="user-456",
metadata={
"workspace_id": "ws-789",
"analysis_type": "sales_report"
}
)
print(result.raw)
if __name__ == "__main__":
asyncio.run(main())
Class-Based Approach
from crewai_langfuse import TracedCrew
# Wrap your crew with tracing capabilities
traced_crew = TracedCrew(
crew=crew,
default_span_name="my-ai-workflow",
default_session_id="session-789",
default_metadata={"version": "2.0", "environment": "production"}
)
# Execute with tracing (async)
result = await traced_crew.kickoff_async(
inputs={"task": "Generate market analysis"},
user_id="user-123"
)
Decorator Approach
from crewai_langfuse import traced
@traced(span_name="custom-workflow", metadata={"team": "data-science"})
async def run_analysis_workflow(crew, user_input):
return await crew.kickoff_async({"input": user_input})
# Usage
result = await run_analysis_workflow(crew, "Analyze customer churn")
Advanced Configuration
Custom Configuration
from crewai_langfuse import LangfuseConfig, execute_crew_with_tracing
# Create custom configuration
config = LangfuseConfig(
secret_key="your-key",
public_key="your-public-key",
host="https://your-instance.com",
enabled=True,
sample_rate=0.5,
flush_interval=1000
)
result = await execute_crew_with_tracing(
crew=crew,
inputs={"task": "Custom analysis"},
config=config
)
Requirements
Core Dependencies
- Python >= 3.8
- crewai >= 0.28.0
- langfuse >= 2.0.0
- openinference-instrumentation-crewai >= 0.1.0
- openinference-instrumentation-litellm >= 0.1.0
Running Examples
# Set up your environment variables
export LANGFUSE_ENABLED=1
export LANGFUSE_SECRET_KEY="your-secret-key"
export LANGFUSE_PUBLIC_KEY="your-public-key"
export LANGFUSE_HOST="https://your-langfuse-instance.com"
# Run examples
python examples/basic_usage.py
python examples/advanced_usage.py
License
This project is licensed under the MIT License
Acknowledgments
- CrewAI for the amazing multi-agent framework
- Langfuse for the powerful LLM observability platform
- OpenInference for instrumentation capabilities
Metadata
Release files for crewai-observe 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| crewai_observe-0.1.0.tar.gz | 213.1 kB | Without provenance | Details for crewai_observe-0.1.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| crewai_observe-0.1.0-py3-none-any.whl | Python 3 | none | any | Details for crewai_observe-0.1.0-py3-none-any.whl |
Total release size: 225.2 kB
Release files / crewai_observe-0.1.0.tar.gz
| Download URL | crewai_observe-0.1.0.tar.gz |
|---|---|
| Size | 213.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
b1a9adf01554870b5cf4eb79dc5a46ac6ae820a8cf033367ec60eeaca56f6b56
|
|
BLAKE2b-256 checksum How to use checksums |
5c0180be7e2db28c8e08a2707cab68a528b445d91a384cf886d3bf6d66718803
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
poetry/2.1.3 CPython/3.12.11 Darwin/24.6.0
|
Release files / crewai_observe-0.1.0-py3-none-any.whl
| Download URL | crewai_observe-0.1.0-py3-none-any.whl |
|---|---|
| Size | 12.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
9f90b36dd8b3d3fe09cdc89001759cf5629672ca499535e667e92455c248c82f
|
|
BLAKE2b-256 checksum How to use checksums |
6bf7d84abf017ea1e46f635339a84eaa1aa79dc11b9edec305b5004a0d9bb2e5
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
poetry/2.1.3 CPython/3.12.11 Darwin/24.6.0
|
Security for crewai-observe 0.1.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.