diff --git a/cookbook/_routes.json b/cookbook/_routes.json
index 68fd6d99b..ef22e3027 100644
--- a/cookbook/_routes.json
+++ b/cookbook/_routes.json
@@ -23,6 +23,10 @@
"notebook": "integration_llama-index.ipynb",
"docsPath": "docs/integrations/llama-index/example-python"
},
+ {
+ "notebook": "integration_crew_ai.ipynb",
+ "docsPath": null
+ },
{
"notebook": "evaluation_with_langchain.ipynb",
"docsPath": null
diff --git a/cookbook/integration_crew_ai.ipynb b/cookbook/integration_crew_ai.ipynb
new file mode 100644
index 000000000..c03fdc0f7
--- /dev/null
+++ b/cookbook/integration_crew_ai.ipynb
@@ -0,0 +1,237 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "id": "27543dcb-8057-4e1c-840f-088ff050d348",
+ "metadata": {},
+ "source": [
+ "---\n",
+ "description: Cookbook with examples of the Langfuse Integration for crewAI.\n",
+ "category: Integrations\n",
+ "---"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "138ab723-ffcc-4737-a975-35f2ff5c5647",
+ "metadata": {},
+ "source": [
+ "# Cookbook: crewAI Integration\n",
+ "\n",
+ "This is a cookbook with examples of the Langfuse Integration for [crewAI](https://docs.crewai.com/) ([GitHub](https://github.com/joaomdmoura/crewai/)).
\n",
+ "It utilizes the Langfuse [OpenAI Integration](https://langfuse.com/docs/integrations/openai/python/get-started) and the [@observe() decorator](https://langfuse.com/docs/sdk/python/decorators). The OpenAI Integration ensures that each step executed by your crew is logged as a new generation in the system. The @observe() decorator automatically and asynchronously groups these logs into a single trace.\n",
+ "\n",
+ "\n",
+ "_Note: crewAI is compatible with Python >=3.10, <=3.13._"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "612c578f-6fb0-4bd6-be5b-c9d8a2cbe92b",
+ "metadata": {},
+ "source": [
+ "## Setup"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "95f85c1c-38cf-4219-8a0e-7da10718db8a",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "!pip install crewai langfuse"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "70454872-cf6f-4d61-b9ad-e469dc025dfb",
+ "metadata": {},
+ "source": [
+ "Initialize the Langfuse client with your API keys from the project settings in the Langfuse UI and add them to your environment."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "2d051611-708d-4ebf-b82a-bc825cf8fbf3",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "import os\n",
+ "\n",
+ "os.environ[\"LANGFUSE_PUBLIC_KEY\"] = \"\"\n",
+ "os.environ[\"LANGFUSE_SECRET_KEY\"] = \"\"\n",
+ "os.environ[\"LANGFUSE_HOST\"] = \"https://cloud.langfuse.com\" # For US data region, set this to \"https://us.cloud.langfuse.com\"\n",
+ "\n",
+ "os.environ[\"OPENAI_API_KEY\"] = \"\""
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "79689da5-0e4e-466f-9a76-70e2bd1fca1c",
+ "metadata": {},
+ "source": [
+ "Import the Langfuse OpenAI integration and check the server connection."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "f008bd03-1571-4800-84da-11726d0e9da3",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "from langfuse.openai import auth_check\n",
+ "\n",
+ "auth_check()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "af27daeb-9db3-4f46-a509-21d1586652db",
+ "metadata": {},
+ "source": [
+ "### Create Custom Tool\n",
+ "\n",
+ "For more information on how to create custom tools for the crewAI framework, please visit the [crewAI docs](https://docs.crewai.com/how-to/Create-Custom-Tools)."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "ab4b002a-f8ad-46cf-8ad9-efbf7c24f1fb",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "from crewai_tools import tool\n",
+ "\n",
+ "@tool\n",
+ "def multiplication_tool(first_number: int, second_number: int) -> str:\n",
+ " \"\"\"Useful for when you need to multiply two numbers together.\"\"\"\n",
+ " return first_number * second_number"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "2e39f73a-62d8-4207-8cf2-6396fc275c42",
+ "metadata": {},
+ "source": [
+ "### Assemble Crew\n",
+ "\n",
+ "For detailed instructions on setting up your crew, please refer to the [crewAI documentation](https://docs.crewai.com/how-to/Creating-a-Crew-and-kick-it-off/)."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "2d094b88-7d58-44c3-8679-41f90e70d8ad",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "from crewai import Agent, Task, Crew\n",
+ "\n",
+ "writer = Agent(\n",
+ " role=\"Writer\",\n",
+ " goal=\"You make math engaging and understandable for young children through poetry\",\n",
+ " backstory=\"You're an expert in writing haikus but you know nothing of math.\",\n",
+ " tools=[multiplication_tool], \n",
+ " )\n",
+ "\n",
+ "task = Task(description=(\"What is {multiplication}?\"),\n",
+ " expected_output=(\"Compose a haiku that includes the answer.\"),\n",
+ " agent=writer)\n",
+ "\n",
+ "crew = Crew(\n",
+ " agents=[writer],\n",
+ " tasks=[task],\n",
+ " share_crew=False\n",
+ ")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "00d8bf44-1398-4f28-bcda-c51d3acc08e4",
+ "metadata": {},
+ "source": [
+ "## Examples\n",
+ "\n",
+ "### Simple Example using OpenAI Integration and @observe() decorator\n",
+ "\n",
+ "You can use this integration in combination with the `@observe()` decorator from the Langfuse Python SDK. Thereby, you can trace non-Langchain code, combine multiple Langchain invocations in a single trace, and use the full functionality of the Langfuse Python SDK.\n",
+ "\n",
+ "Learn more about Langfuse Tracing [here](https://langfuse.com/docs/tracing)."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "b7998dbc-726e-4f23-bf0b-9789671f2b43",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "from langfuse.decorators import observe\n",
+ "\n",
+ "@observe()\n",
+ "def create_simple_haiku(input):\n",
+ " result = crew.kickoff(inputs={\"multiplication\": input})\n",
+ " return result\n",
+ "\n",
+ "create_simple_haiku(\"3 * 3\")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "ef43f4c8-9be1-44ea-a874-4e8676a7be33",
+ "metadata": {},
+ "source": [
+ "### Example with additional trace attributes"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "68b9f0de-ada2-4b72-a9a1-6a4472d8ead9",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "from langfuse.decorators import langfuse_context\n",
+ "\n",
+ "@observe()\n",
+ "def create_custom_haiku(input):\n",
+ " result = crew.kickoff(inputs={\"multiplication\": input})\n",
+ " langfuse_context.update_current_observation(\n",
+ " name=\"Crew AI Trace\",\n",
+ " session_id=\"session_id\",\n",
+ " user_id=\"user_id\",\n",
+ " tags=[\"haiku\"],\n",
+ " metadata={\"env\": \"prod\"}\n",
+ " )\n",
+ " return result\n",
+ "\n",
+ "create_custom_haiku(\"5 * 3\")"
+ ]
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3 (ipykernel)",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.12.2"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}
diff --git a/pages/guides/cookbook/integration_crew_ai.md b/pages/guides/cookbook/integration_crew_ai.md
new file mode 100644
index 000000000..ebc816a6e
--- /dev/null
+++ b/pages/guides/cookbook/integration_crew_ai.md
@@ -0,0 +1,122 @@
+---
+description: Cookbook with examples of the Langfuse Integration for crewAI.
+category: Integrations
+---
+
+# Cookbook: crewAI Integration
+
+This is a cookbook with examples of the Langfuse Integration for [crewAI](https://docs.crewai.com/) ([GitHub](https://github.com/joaomdmoura/crewai/)).
+It utilizes the Langfuse [OpenAI Integration](https://langfuse.com/docs/integrations/openai/python/get-started) and the [@observe() decorator](https://langfuse.com/docs/sdk/python/decorators). The OpenAI Integration ensures that each step executed by your crew is logged as a new generation in the system. The @observe() decorator automatically and asynchronously groups these logs into a single trace.
+
+
+_Note: crewAI is compatible with Python >=3.10, <=3.13._
+
+## Setup
+
+
+```python
+!pip install crewai langfuse
+```
+
+Initialize the Langfuse client with your API keys from the project settings in the Langfuse UI and add them to your environment.
+
+
+```python
+import os
+
+os.environ["LANGFUSE_PUBLIC_KEY"] = ""
+os.environ["LANGFUSE_SECRET_KEY"] = ""
+os.environ["LANGFUSE_HOST"] = "https://cloud.langfuse.com" # For US data region, set this to "https://us.cloud.langfuse.com"
+
+os.environ["OPENAI_API_KEY"] = ""
+```
+
+Import the Langfuse OpenAI integration and check the server connection.
+
+
+```python
+from langfuse.openai import auth_check
+
+auth_check()
+```
+
+### Create Custom Tool
+
+For more information on how to create custom tools for the crewAI framework, please visit the [crewAI docs](https://docs.crewai.com/how-to/Create-Custom-Tools).
+
+
+```python
+from crewai_tools import tool
+
+@tool
+def multiplication_tool(first_number: int, second_number: int) -> str:
+ """Useful for when you need to multiply two numbers together."""
+ return first_number * second_number
+```
+
+### Assemble Crew
+
+For detailed instructions on setting up your crew, please refer to the [crewAI documentation](https://docs.crewai.com/how-to/Creating-a-Crew-and-kick-it-off/).
+
+
+```python
+from crewai import Agent, Task, Crew
+
+writer = Agent(
+ role="Writer",
+ goal="You make math engaging and understandable for young children through poetry",
+ backstory="You're an expert in writing haikus but you know nothing of math.",
+ tools=[multiplication_tool],
+ )
+
+task = Task(description=("What is {multiplication}?"),
+ expected_output=("Compose a haiku that includes the answer."),
+ agent=writer)
+
+crew = Crew(
+ agents=[writer],
+ tasks=[task],
+ share_crew=False
+)
+```
+
+## Examples
+
+### Simple Example using OpenAI Integration and @observe() decorator
+
+You can use this integration in combination with the `@observe()` decorator from the Langfuse Python SDK. Thereby, you can trace non-Langchain code, combine multiple Langchain invocations in a single trace, and use the full functionality of the Langfuse Python SDK.
+
+Learn more about Langfuse Tracing [here](https://langfuse.com/docs/tracing).
+
+
+```python
+from langfuse.decorators import observe
+
+@observe()
+def create_simple_haiku(input):
+ result = crew.kickoff(inputs={"multiplication": input})
+ return result
+
+create_simple_haiku("3 * 3")
+```
+
+### Example with additional trace attributes
+
+
+```python
+from langfuse.decorators import langfuse_context
+
+@observe()
+def create_custom_haiku(input):
+ result = crew.kickoff(inputs={"multiplication": input})
+ langfuse_context.update_current_observation(
+ name="Crew AI Trace",
+ session_id="session_id",
+ user_id="user_id",
+ tags=["haiku"],
+ metadata={"env": "prod"}
+ )
+ return result
+
+create_custom_haiku("5 * 3")
+```