diff --git a/Notebooks/Coding Assistant/coding_assistant_eval.ipynb b/notebooks/Coding Assistant/coding_assistant_eval.ipynb similarity index 100% rename from Notebooks/Coding Assistant/coding_assistant_eval.ipynb rename to notebooks/Coding Assistant/coding_assistant_eval.ipynb diff --git a/notebooks/Flows_101/crewai_flows_101.ipynb b/notebooks/Flows_101/crewai_flows_101.ipynb new file mode 100644 index 00000000..c53fc25b --- /dev/null +++ b/notebooks/Flows_101/crewai_flows_101.ipynb @@ -0,0 +1,1883 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "D2QMtJMSc4Sj" + }, + "source": [ + "# ๐ **CrewAI Flow: Dynamic Content Creation Router**\n", + "\n", + "## Project Overview\n", + "\n", + "This notebook demonstrates a **CrewAI Flow** that dynamically routes content creation tasks to specialized crew of agents based on user input. This workflow showcases CrewAI's advanced Flow architecture with **state persistence**, **event-driven routing**, and **multi-crew orchestration**.\n", + "\n", + "### ๐ฏ What you'll learn\n", + "\n", + "- **Flow Architecture**: Event-driven workflows with `@start`, `@router`, and `@listen` decorators\n", + "- **State Management**: Persistent state across workflow execution with `@persist`\n", + "- **Dynamic Routing**: Intelligent crew selection based on content type\n", + "- **Multi-Crew Orchestration**: Coordinating specialized teams for different content formats\n", + "\n", + "### ๐ Flow Steps:\n", + "1. **Input Collection**: Gather URL and desired content type from user\n", + "2. **Dynamic Routing**: Route to appropriate specialized crew based on content type\n", + "3. **Content Processing**: Execute specialized content creation with dedicated crews\n", + "4. **Output Finalization**: Return polished, ready-to-use content" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "yx2ptS5qdNbZ" + }, + "source": [ + "First we'll start by installing the required packages." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "collapsed": true, + "id": "G-Dic6iLdHLF", + "outputId": "ebe519ff-c984-4da9-9ca3-67cda984a523" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[2K \u001b[90mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m \u001b[32m40.6/40.6 kB\u001b[0m \u001b[31m2.5 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[2K \u001b[90mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m \u001b[32m42.8/42.8 kB\u001b[0m \u001b[31m2.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[2K \u001b[90mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m \u001b[32m67.3/67.3 kB\u001b[0m \u001b[31m4.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25h Installing build dependencies ... \u001b[?25l\u001b[?25hdone\n", + " Getting requirements to build wheel ... \u001b[?25l\u001b[?25hdone\n", + " Preparing metadata (pyproject.toml) ... \u001b[?25l\u001b[?25hdone\n", + "\u001b[2K \u001b[90mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m \u001b[32m48.5/48.5 kB\u001b[0m \u001b[31m3.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[2K \u001b[90mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m \u001b[32m418.7/418.7 kB\u001b[0m \u001b[31m16.4 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[2K \u001b[90mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m \u001b[32m8.7/8.7 MB\u001b[0m \u001b[31m67.3 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[2K \u001b[90mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m \u001b[32m16.4/16.4 MB\u001b[0m \u001b[31m66.9 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[2K \u001b[90mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m \u001b[32m719.8/719.8 kB\u001b[0m \u001b[31m36.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[2K \u001b[90mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m \u001b[32m628.3/628.3 kB\u001b[0m \u001b[31m32.5 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[2K \u001b[90mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m \u001b[32m2.4/2.4 MB\u001b[0m \u001b[31m83.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[2K \u001b[90mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m \u001b[32m147.8/147.8 kB\u001b[0m \u001b[31m13.0 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[2K \u001b[90mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m \u001b[32m211.3/211.3 kB\u001b[0m \u001b[31m15.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[2K \u001b[90mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m \u001b[32m155.5/155.5 kB\u001b[0m \u001b[31m12.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[2K \u001b[90mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m \u001b[32m35.8/35.8 MB\u001b[0m \u001b[31m24.6 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[2K \u001b[90mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m \u001b[32m72.5/72.5 kB\u001b[0m \u001b[31m4.6 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[2K \u001b[90mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m \u001b[32m131.9/131.9 kB\u001b[0m \u001b[31m9.9 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[2K \u001b[90mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m \u001b[32m65.7/65.7 kB\u001b[0m \u001b[31m4.3 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[2K \u001b[90mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m \u001b[32m208.0/208.0 kB\u001b[0m \u001b[31m14.5 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[2K \u001b[90mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m \u001b[32m60.0/60.0 kB\u001b[0m \u001b[31m4.4 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[2K \u001b[90mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m \u001b[32m5.6/5.6 MB\u001b[0m \u001b[31m87.5 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[2K \u001b[90mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m \u001b[32m5.9/5.9 MB\u001b[0m \u001b[31m78.4 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[2K \u001b[90mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m \u001b[32m57.6/57.6 kB\u001b[0m \u001b[31m4.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[2K \u001b[90mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m \u001b[32m756.0/756.0 kB\u001b[0m \u001b[31m35.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[2K \u001b[90mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m \u001b[32m106.7/106.7 kB\u001b[0m \u001b[31m8.6 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[2K \u001b[90mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m \u001b[32m786.2/786.2 kB\u001b[0m \u001b[31m44.0 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[2K \u001b[90mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m \u001b[32m3.0/3.0 MB\u001b[0m \u001b[31m83.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[2K \u001b[90mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m \u001b[32m242.3/242.3 kB\u001b[0m \u001b[31m17.4 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[2K \u001b[90mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m \u001b[32m21.1/21.1 MB\u001b[0m \u001b[31m78.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[2K \u001b[90mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m \u001b[32m317.1/317.1 kB\u001b[0m \u001b[31m23.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[2K \u001b[90mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m \u001b[32m284.2/284.2 kB\u001b[0m \u001b[31m20.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[2K \u001b[90mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m \u001b[32m98.0/98.0 kB\u001b[0m \u001b[31m7.4 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[2K \u001b[90mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m \u001b[32m45.5/45.5 kB\u001b[0m \u001b[31m3.3 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[2K \u001b[90mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m \u001b[32m131.6/131.6 kB\u001b[0m \u001b[31m10.0 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[2K \u001b[90mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m \u001b[32m1.9/1.9 MB\u001b[0m \u001b[31m73.3 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[2K \u001b[90mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m \u001b[32m45.1/45.1 kB\u001b[0m \u001b[31m3.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[2K \u001b[90mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m \u001b[32m2.5/2.5 MB\u001b[0m \u001b[31m66.9 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[2K \u001b[90mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m \u001b[32m64.7/64.7 kB\u001b[0m \u001b[31m4.9 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[2K \u001b[90mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m \u001b[32m50.9/50.9 kB\u001b[0m \u001b[31m3.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[2K \u001b[90mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m \u001b[32m363.0/363.0 kB\u001b[0m \u001b[31m24.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[2K \u001b[90mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m \u001b[32m213.1/213.1 kB\u001b[0m \u001b[31m15.3 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[2K \u001b[90mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m \u001b[32m103.3/103.3 kB\u001b[0m \u001b[31m8.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[2K \u001b[90mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m \u001b[32m45.9/45.9 MB\u001b[0m \u001b[31m12.6 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[2K \u001b[90mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m \u001b[32m89.1/89.1 kB\u001b[0m \u001b[31m5.9 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[2K \u001b[90mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m \u001b[32m313.2/313.2 kB\u001b[0m \u001b[31m20.4 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[2K \u001b[90mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m \u001b[32m2.8/2.8 MB\u001b[0m \u001b[31m77.6 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[2K \u001b[90mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m \u001b[32m71.1/71.1 kB\u001b[0m \u001b[31m5.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[2K \u001b[90mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m \u001b[32m46.0/46.0 kB\u001b[0m \u001b[31m3.0 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[2K \u001b[90mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m \u001b[32m295.3/295.3 kB\u001b[0m \u001b[31m21.6 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[2K \u001b[90mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m \u001b[32m510.8/510.8 kB\u001b[0m \u001b[31m32.5 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[2K \u001b[90mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m \u001b[32m86.8/86.8 kB\u001b[0m \u001b[31m6.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[2K \u001b[90mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m \u001b[32m1.6/1.6 MB\u001b[0m \u001b[31m66.3 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[2K \u001b[90mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m \u001b[32m209.2/209.2 kB\u001b[0m \u001b[31m15.0 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[2K \u001b[90mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m \u001b[32m44.0/44.0 MB\u001b[0m \u001b[31m20.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[2K \u001b[90mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m \u001b[32m337.3/337.3 kB\u001b[0m \u001b[31m21.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[2K \u001b[90mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m \u001b[32m4.7/4.7 MB\u001b[0m \u001b[31m102.6 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[2K \u001b[90mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m \u001b[32m452.2/452.2 kB\u001b[0m \u001b[31m28.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[2K \u001b[90mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m \u001b[32m5.4/5.4 MB\u001b[0m \u001b[31m100.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[2K \u001b[90mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m \u001b[32m229.6/229.6 kB\u001b[0m \u001b[31m17.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[2K \u001b[90mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m \u001b[32m3.5/3.5 MB\u001b[0m \u001b[31m86.5 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[2K \u001b[90mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m \u001b[32m50.9/50.9 kB\u001b[0m \u001b[31m3.9 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25h Building wheel for pypika (pyproject.toml) ... \u001b[?25l\u001b[?25hdone\n", + "\u001b[31mERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.\n", + "google-colab 1.0.0 requires requests==2.32.4, but you have requests 2.32.5 which is incompatible.\n", + "transformers 4.56.1 requires tokenizers<=0.23.0,>=0.22.0, but you have tokenizers 0.20.3 which is incompatible.\u001b[0m\u001b[31m\n", + "\u001b[0m" + ] + } + ], + "source": [ + "%pip install -U --quiet crewai==0.177.0 crewai_tools" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "cJhrxHrefNcK" + }, + "source": [ + "Set the API Keys needed:\n", + "\n", + "- `OPENAI_API_KEY` or any LLM provider you prefer\n", + "- `SERPER_API_KEY` they have a generous free tier you can use. Get your key at https://serper.dev" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "CaXuYxNXeydI", + "outputId": "d9441cfa-f234-491d-c102-68950325d61a" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "โ API keys set\n" + ] + } + ], + "source": [ + "import getpass\n", + "import os\n", + "\n", + "# Get keys from environment first\n", + "OPENAI_API_KEY = os.environ.get('OPENAI_API_KEY')\n", + "SERPER_API_KEY = os.environ.get('SERPER_API_KEY')\n", + "\n", + "# Prompt user for keys only if not already set\n", + "if not OPENAI_API_KEY:\n", + " OPENAI_API_KEY = getpass.getpass(\"OpenAI API key (hidden): \")\n", + "if not SERPER_API_KEY:\n", + " SERPER_API_KEY = getpass.getpass(\"Serper API key (hidden): \")\n", + "\n", + "if OPENAI_API_KEY and SERPER_API_KEY:\n", + " os.environ['OPENAI_API_KEY'] = OPENAI_API_KEY\n", + " os.environ['SERPER_API_KEY'] = SERPER_API_KEY\n", + " print(\"โ API keys set\")\n", + "else:\n", + " print(\"๐จ API keys not set\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "tul7CSEKp84o" + }, + "source": [ + "### Define the State Model for the Flow\n", + "\n", + "The state model is like a shared notebook that all agents can read and write to.\n", + "\n", + "It persists data throughout the entire workflow execution." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "xIb41H6U1eej" + }, + "outputs": [], + "source": [ + "from typing import Dict, Any\n", + "from pydantic import BaseModel\n", + "\n", + "class ContentState(BaseModel):\n", + " \"\"\"\n", + " State model that tracks information throughout the content creation workflow.\n", + "\n", + " Think of this as a form that gets filled out as the workflow progresses:\n", + " - Start: Only URL is filled\n", + " - After routing: Content type is determined\n", + " - After processing: Final content is ready\n", + " - Throughout: Metadata can be added by any step\n", + " \"\"\"\n", + " url: str = \"\" # The source website we're analyzing\n", + " content_type: str = \"\" # \"blog\", \"newsletter\", or \"linkedin\"\n", + " final_content: str = \"\" # The final content after processing\n", + " metadata: Dict[str, Any] = {} # Arbitrary metadata" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "TXyaqY2DqJEL" + }, + "source": [ + "**Why use state?**\n", + "1. **Data Persistence**: Information flows between different workflow steps\n", + "2. **Type Safety**: Pydantic ensures data integrity\n", + "3. **Flexibility**: Easy to add new fields as workflow evolves\n", + "4. **Debugging**: Clear view of what data exists at each step" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "pM-9CyXnqQOz" + }, + "source": [ + "### Create Specialized Agent Teams for Each Content Type\n", + "\n", + "Think of these agents as factories for each content type:\n", + "- We're using factory functions to create specialized agent pairs\n", + "- Each content type gets its own **researcher + writer** team\n", + "- This allows for highly specialized expertise and output formats" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "Q30JgXCsqlcn" + }, + "source": [ + "1. **Blog content creation agents.**\n", + "\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "htfE87J-elaK", + "outputId": "9151c11c-9090-461e-ba4b-4e2c7b5b247b" + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/usr/local/lib/python3.12/dist-packages/jupyter_client/session.py:203: DeprecationWarning: datetime.datetime.utcnow() is deprecated and scheduled for removal in a future version. Use timezone-aware objects to represent datetimes in UTC: datetime.datetime.now(datetime.UTC).\n", + " return datetime.utcnow().replace(tzinfo=utc)\n" + ] + } + ], + "source": [ + "from crewai import Agent, LLM\n", + "from crewai_tools import SerperDevTool\n", + "\n", + "def create_blog_agents():\n", + " \"\"\"Create agents specialized for blog content\"\"\"\n", + "\n", + " blog_researcher = Agent(\n", + " role=\"Blog Content Researcher\",\n", + " goal=\"Extract and analyze web content to identify key insights for blog posts\",\n", + " backstory=\"\"\"You are an expert content researcher who specializes in analyzing\n", + " web content and identifying the most valuable insights for creating engaging blog posts.\n", + " You excel at understanding complex topics and breaking them down into digestible content.\"\"\",\n", + " verbose=True,\n", + " tool=[SerperDevTool()],\n", + " llm=LLM(model=\"gpt-4o-mini\"),\n", + " max_iter=5\n", + " )\n", + "\n", + " blog_writer = Agent(\n", + " role=\"Blog Content Writer\",\n", + " goal=\"Transform research into engaging, well-structured blog posts\",\n", + " backstory=\"\"\"You are a skilled blog writer with expertise in creating compelling content\n", + " that engages readers and drives meaningful discussions. You excel at taking complex\n", + " information and making it accessible and interesting.\"\"\",\n", + " verbose=True,\n", + " llm=LLM(model=\"gpt-4o-mini\")\n", + " )\n", + "\n", + " return blog_researcher, blog_writer" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "2VRpAN2hqshE" + }, + "source": [ + "2. **Newsletter content creation agents.**" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "fonaWxPweoLp" + }, + "outputs": [], + "source": [ + "def create_newsletter_agents():\n", + " \"\"\"Create agents specialized for newsletter content\"\"\"\n", + "\n", + " newsletter_researcher = Agent(\n", + " role=\"Newsletter Content Researcher\",\n", + " goal=\"Extract key insights from web content for newsletter format\",\n", + " backstory=\"\"\"You are an expert at identifying the most newsworthy and actionable\n", + " insights from web content. You understand what makes content valuable for newsletter\n", + " subscribers and how to present information concisely.\"\"\",\n", + " verbose=True,\n", + " tool=[SerperDevTool()],\n", + " llm=LLM(model=\"gpt-4o-mini\"),\n", + " max_iter=5\n", + " )\n", + "\n", + " newsletter_writer = Agent(\n", + " role=\"Newsletter Writer\",\n", + " goal=\"Create engaging newsletter content that provides immediate value\",\n", + " backstory=\"\"\"You are a newsletter specialist who knows how to craft content that\n", + " busy professionals want to read. You excel at creating scannable, actionable content\n", + " with clear takeaways.\"\"\",\n", + " verbose=True,\n", + " llm=LLM(model=\"gpt-4o-mini\")\n", + " )\n", + "\n", + " return newsletter_researcher, newsletter_writer" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "WxvCGcLVq4vC" + }, + "source": [ + "3. **LinkedIn content creation agents.**" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "LncnBvjtgsWT" + }, + "outputs": [], + "source": [ + "def create_linkedin_agents():\n", + " \"\"\"Create agents specialized for LinkedIn content\"\"\"\n", + "\n", + " linkedin_researcher = Agent(\n", + " role=\"LinkedIn Content Researcher\",\n", + " goal=\"Extract professional insights suitable for LinkedIn audience\",\n", + " backstory=\"\"\"You are an expert at identifying professional insights and industry\n", + " trends that resonate with LinkedIn's professional audience. You understand what\n", + " content drives engagement on professional networks.\"\"\",\n", + " verbose=True,\n", + " tool=[SerperDevTool()],\n", + " llm=LLM(model=\"gpt-4o-mini\"),\n", + " max_iter=5\n", + " )\n", + "\n", + " linkedin_writer = Agent(\n", + " role=\"LinkedIn Content Writer\",\n", + " goal=\"Create engaging LinkedIn posts that drive professional engagement\",\n", + " backstory=\"\"\"You are a LinkedIn content specialist who knows how to craft posts\n", + " that get noticed in the professional feed. You excel at creating content that\n", + " sparks meaningful professional discussions.\"\"\",\n", + " verbose=True,\n", + " llm=LLM(model=\"gpt-4o-mini\")\n", + " )\n", + "\n", + " return linkedin_researcher, linkedin_writer" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "TOO4ajI8g2mg" + }, + "source": [ + "### Define task creation functions for each content type\n", + "\n", + "Task design principles:\n", + "1. Clear, specific instructions improve output quality\n", + "2. One-shot examples of the final output helps the agent accomplish better than without examples\n", + "3. Task guardrails is another advanced CrewAI feature that can be used to make the task outputs more deterministic. More on that [here](https://docs.crewai.com/en/concepts/tasks#task-guardrails)." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "9mmiaRCorByr" + }, + "source": [ + "1. **Blog writing Task.**\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "0UdrxHDUgw5y" + }, + "outputs": [], + "source": [ + "from crewai import Task\n", + "\n", + "def create_blog_tasks(researcher, writer, url):\n", + " \"\"\"Create tasks for blog content generation\"\"\"\n", + "\n", + " research_task = Task(\n", + " description=f\"\"\"\n", + " Analyze the content from {url} and extract key insights for a blog post.\n", + " Your analysis should identify:\n", + " 1. Main themes and key points\n", + " 2. Interesting insights or data points\n", + " 3. Potential angles for blog content\n", + " 4. Target audience considerations\n", + " 5. SEO-worthy topics and keywords\n", + "\n", + " Provide a comprehensive research summary that will guide blog writing.\n", + " \"\"\",\n", + " expected_output=\"A detailed research summary with key insights, themes, and recommendations for blog content\",\n", + " agent=researcher\n", + " )\n", + "\n", + " writing_task = Task(\n", + " description=\"\"\"\n", + " Create an engaging blog post based on the research findings.\n", + "\n", + " Requirements:\n", + " - 800-1200 words\n", + " - Engaging headline\n", + " - Clear introduction with hook\n", + " - Well-structured body with subheadings\n", + " - Actionable insights or takeaways\n", + " - Strong conclusion\n", + " - SEO-optimized content\n", + " - Professional yet accessible tone\n", + "\n", + " Format the output in markdown.\n", + " \"\"\",\n", + " expected_output=\"A complete, well-structured blog post in markdown format\",\n", + " agent=writer,\n", + " context=[research_task]\n", + " )\n", + "\n", + " return [research_task, writing_task]" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "YyozTXgprOLw" + }, + "source": [ + "2. **Newsletter writing Task.**" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "9WP3fsOeg8lf" + }, + "outputs": [], + "source": [ + "def create_newsletter_tasks(researcher, writer, url):\n", + " \"\"\"Create tasks for newsletter content generation\"\"\"\n", + "\n", + " research_task = Task(\n", + " description=f\"\"\"\n", + " Analyze the content from {url} and extract the most newsworthy insights for a newsletter.\n", + " Focus on:\n", + " 1. Most important news or updates\n", + " 2. Actionable insights subscribers can use immediately\n", + " 3. Key statistics or data points\n", + " 4. Industry implications\n", + " 5. Quick takeaways for busy professionals\n", + "\n", + " Prioritize information that provides immediate value.\n", + " \"\"\",\n", + " expected_output=\"A focused research summary highlighting the most valuable and actionable insights\",\n", + " agent=researcher\n", + " )\n", + "\n", + " writing_task = Task(\n", + " description=\"\"\"\n", + " Create a compelling newsletter section based on the research.\n", + "\n", + " Requirements:\n", + " - 400-600 words\n", + " - Catchy subject line\n", + " - Scannable format with bullet points\n", + " - Clear action items or takeaways\n", + " - Conversational yet professional tone\n", + " - Include relevant links or resources\n", + " - End with a clear call-to-action\n", + "\n", + " Format for easy reading in email.\n", + " \"\"\",\n", + " expected_output=\"A complete newsletter section with subject line and formatted content\",\n", + " agent=writer,\n", + " context=[research_task]\n", + " )\n", + "\n", + " return [research_task, writing_task]" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "4hDXksoYrS1o" + }, + "source": [ + "2. **LinkedIn post writing Task.**" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "rg0rxmZHiAI-" + }, + "outputs": [], + "source": [ + "def create_linkedin_tasks(researcher, writer, url):\n", + " \"\"\"Create tasks for LinkedIn content generation\"\"\"\n", + "\n", + " research_task = Task(\n", + " description=f\"\"\"\n", + " Analyze the content from {url} and extract insights suitable for LinkedIn audience.\n", + " Consider what would engage LinkedIn's professional audience based on the content.\n", + " \"\"\",\n", + " expected_output=\"Research summary focused on professional insights and engagement opportunities\",\n", + " agent=researcher\n", + " )\n", + "\n", + " writing_task = Task(\n", + " description=\"\"\"\n", + " Create an engaging LinkedIn post based on the research.\n", + "\n", + " Requirements:\n", + " - 150-300 words (optimal LinkedIn length)\n", + " - Professional yet conversational tone\n", + " - Include relevant hashtags (3-5)\n", + " - Pose a question to encourage engagement\n", + " - Share a key insight or lesson learned from the content\n", + " - Use line breaks for readability\n", + " - Include a call-to-action for comments\n", + "\n", + " Make it shareable and discussion-worthy.\n", + " \"\"\",\n", + " expected_output=\"A complete LinkedIn post with hashtags and engagement elements\",\n", + " agent=writer,\n", + " context=[research_task]\n", + " )\n", + "\n", + " return [research_task, writing_task]" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "c2ee4e6b" + }, + "source": [ + "### **ContentRouterFlow Class Analysis**\n", + "\n", + "This class orchestrates the entire content creation pipeline.\n", + "\n", + "**Class Overview**\n", + "\n", + "- `ContentRouterFlow` is a **subclass of `Flow[ContentState]`** that implements an event-driven workflow for dynamic content creation routing. It demonstrates CrewAI's Flow architecture with state management and specialized crew routing.\n", + "\n", + "### Key Decorators & Their Roles\n", + "\n", + "**๐พ `@persist()`**\n", + "\n", + "- **Purpose**: Enables automatic state persistence across workflow execution\n", + "- **Behavior**: Saves flow state to SQLite database by default\n", + "- **Benefits**: Workflow recovery, state tracking, and debugging capabilities\n", + "- **Scope**: Applied at class level to persist all method states\n", + "\n", + "**๐ `@start()`**\n", + "- **Purpose**: Marks the workflow entry point\n", + "- **Function**: Collects user input (URL + content type) and initializes state\n", + "- **Triggers**: Automatic when flow begins\n", + "\n", + "**๐งญ `@router(get_user_input)`**\n", + "- **Purpose**: Creates decision point for workflow routing\n", + "- **Logic**: Returns `self.state.content_type` to determine next path\n", + "- **Output**: Routes to \"blog\", \"newsletter\", or \"linkedin\" listeners\n", + "\n", + "**๐ `@listen(\"event_name\")`**\n", + "- **Purpose**: Creates event listeners for specific triggers\n", + "- **Behavior**: Methods execute when their specified event occurs\n", + "- **Examples**: `@listen(\"blog\")`, `@listen(\"newsletter\")`, `@listen(\"linkedin\")`\n", + "\n", + "## Workflow:\n", + "\n", + "1. The workflow starts with **`@start()`** on **`get_user_input()`**.\n", + "2. The result of **`get_user_input()`** is routed by **`@router()`** to one of the `process_*_content` methods based on the content_type.\n", + "3. Whichever `process_*_content` method runs (e.g., `process_blog_content`), it will eventually complete and save the result to the flow's state." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "rlEEUOE_iBTz" + }, + "outputs": [], + "source": [ + "from crewai.flow.flow import Flow, listen, router, start\n", + "from crewai.flow.persistence import persist\n", + "from crewai import Crew\n", + "\n", + "@persist(verbose=True)\n", + "class ContentRouterFlow(Flow[ContentState]):\n", + " \"\"\"\n", + " A dynamic workflow that routes content creation to specialized crews.\n", + "\n", + " Flow Overview:\n", + " 1. START: Get user input (URL + content type)\n", + " 2. ROUTE: Direct to appropriate content crew\n", + " 3. PROCESS: Execute specialized content creation\n", + " 4. FINISH: Return the final content\n", + "\n", + " This flow demonstrates:\n", + " - Event-driven architecture with decorators\n", + " - State management across workflow steps\n", + " - Dynamic routing based on user input\n", + " - Parallel processing capabilities\n", + " \"\"\"\n", + "\n", + " @start()\n", + " def get_user_input(self):\n", + " \"\"\"Get URL and desired content type from user\"\"\"\n", + " # Enter your target URL here\n", + " url = input(\"Enter your target URL: \") # example: https://blog.crewai.com/crewai-on-2025-ia-enablers-list-with-openai-and-anthropic/\n", + "\n", + " # Enter your content type: blog, newsletter, or LinkedIn\n", + " content_type = input(\"Enter your desired content type (blog, newsletter, or linkedin): \")\n", + "\n", + " # Store in state\n", + " self.state.url = url\n", + " self.state.content_type = content_type\n", + "\n", + " return \"Input collected\"\n", + "\n", + " @router(get_user_input)\n", + " def route_to_crew(self, previous_result):\n", + " \"\"\"Route to appropriate crew based on content type\"\"\"\n", + " return self.state.content_type\n", + "\n", + " @listen(\"blog\")\n", + " def process_blog_content(self):\n", + " \"\"\"Process content using blog crew\"\"\"\n", + " # Create blog agents\n", + " researcher, writer = create_blog_agents()\n", + "\n", + " # Create blog tasks\n", + " tasks = create_blog_tasks(researcher, writer, self.state.url)\n", + "\n", + " # Create and run crew\n", + " blog_crew = Crew(\n", + " agents=[researcher, writer],\n", + " tasks=tasks,\n", + " verbose=True\n", + " )\n", + "\n", + " result = blog_crew.kickoff()\n", + " self.state.final_content = result.raw\n", + "\n", + " return \"Blog content created\"\n", + "\n", + " @listen(\"newsletter\")\n", + " def process_newsletter_content(self):\n", + " \"\"\"Process content using newsletter crew\"\"\"\n", + "\n", + " # Create newsletter agents\n", + " researcher, writer = create_newsletter_agents()\n", + "\n", + " # Create newsletter tasks\n", + " tasks = create_newsletter_tasks(researcher, writer, self.state.url)\n", + "\n", + " # Create and run crew\n", + " newsletter_crew = Crew(\n", + " agents=[researcher, writer],\n", + " tasks=tasks,\n", + " verbose=True\n", + " )\n", + "\n", + " result = newsletter_crew.kickoff()\n", + " self.state.final_content = result.raw\n", + "\n", + " return \"Newsletter content created\"\n", + "\n", + " @listen(\"linkedin\")\n", + " def process_linkedin_content(self):\n", + " \"\"\"Process content using LinkedIn crew\"\"\"\n", + "\n", + " # Create LinkedIn agents\n", + " researcher, writer = create_linkedin_agents()\n", + "\n", + " # Create LinkedIn tasks\n", + " tasks = create_linkedin_tasks(researcher, writer, self.state.url)\n", + "\n", + " # Create and run crew\n", + " linkedin_crew = Crew(\n", + " agents=[researcher, writer],\n", + " tasks=tasks,\n", + " verbose=True\n", + " )\n", + "\n", + " result = linkedin_crew.kickoff()\n", + " self.state.final_content = result.raw\n", + "\n", + " return \"LinkedIn content created\"" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "FtiNVMzJlRUk" + }, + "source": [ + "### Run the Flow\n", + "\n", + "Now we're ready to bring everything together into the flow and run it to start the automation. You should see a print out of the agent process so you can keep track of what the agents are doing." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 1000, + "referenced_widgets": [ + "e07bb2aa3e6c4c3499fb4da283bafe4e", + "b8e0672c349e42228036c8f6e99016c9", + "aaec9eaaa69b4639b59e3745f104aee6", + "7bede0af569c4ee28154bcc1a2a75e25", + "fe3bc2013ef34446ae3370cb67603449", + "aa63125e36e946e39f869b91f8513ee1", + "d7e08ec3db57486cb1123a2330af3d2b", + "32d52106be2640f1af0cf18f3c28b0c0" + ] + }, + "collapsed": true, + "id": "FYNleibaiRh_", + "outputId": "4d22f61a-1541-4402-d71e-8a2256435dfa" + }, + "outputs": [ + { + "data": { + "text/html": [ + "
โญโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ Flow Execution โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ\n", + "โ โ\n", + "โ Starting Flow Execution โ\n", + "โ Name: ContentRouterFlow โ\n", + "โ ID: 8d81f08b-afd3-4713-be92-1327d8702d84 โ\n", + "โ Tool Args: โ\n", + "โ โ\n", + "โ โ\n", + "โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\n", + "\n" + ], + "text/plain": [ + "\u001b[34mโญโ\u001b[0m\u001b[34mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[34m Flow Execution \u001b[0m\u001b[34mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[34mโโฎ\u001b[0m\n", + "\u001b[34mโ\u001b[0m \u001b[34mโ\u001b[0m\n", + "\u001b[34mโ\u001b[0m \u001b[1;34mStarting Flow Execution\u001b[0m \u001b[34mโ\u001b[0m\n", + "\u001b[34mโ\u001b[0m \u001b[37mName: \u001b[0m\u001b[34mContentRouterFlow\u001b[0m \u001b[34mโ\u001b[0m\n", + "\u001b[34mโ\u001b[0m \u001b[37mID: \u001b[0m\u001b[34m8d81f08b-afd3-4713-be92-1327d8702d84\u001b[0m \u001b[34mโ\u001b[0m\n", + "\u001b[34mโ\u001b[0m \u001b[37mTool Args: \u001b[0m \u001b[34mโ\u001b[0m\n", + "\u001b[34mโ\u001b[0m \u001b[34mโ\u001b[0m\n", + "\u001b[34mโ\u001b[0m \u001b[34mโ\u001b[0m\n", + "\u001b[34mโฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/usr/local/lib/python3.12/dist-packages/jupyter_client/session.py:203: DeprecationWarning: datetime.datetime.utcnow() is deprecated and scheduled for removal in a future version. Use timezone-aware objects to represent datetimes in UTC: datetime.datetime.now(datetime.UTC).\n", + " return datetime.utcnow().replace(tzinfo=utc)\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "\n" + ], + "text/plain": [ + "\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
Flow started with ID: 8d81f08b-afd3-4713-be92-1327d8702d84\n",
+ "/usr/local/lib/python3.12/dist-packages/jupyter_client/session.py:203: DeprecationWarning: \n",
+ "datetime.datetime.utcnow() is deprecated and scheduled for removal in a future version. Use timezone-aware objects \n",
+ "to represent datetimes in UTC: datetime.datetime.now(datetime.UTC).\n",
+ " return datetime.utcnow().replace(tzinfo=utc)\n",
+ "\n"
+ ],
+ "text/plain": [
+ "\u001b[1;35m Flow started with ID: 8d81f08b-afd3-4713-be92-1327d8702d84\u001b[0m\n",
+ "/usr/local/lib/python3.12/dist-packages/jupyter_client/session.py:203: DeprecationWarning: \n",
+ "datetime.datetime.utcnow() is deprecated and scheduled for removal in a future version. Use timezone-aware objects \n",
+ "to represent datetimes in UTC: datetime.datetime.now(datetime.UTC).\n",
+ " return datetime.utcnow().replace(tzinfo=utc)\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [
+ " Flow started with ID: 8d81f08b-afd3-4713-be92-1327d8702d84\n",
+ "\n"
+ ],
+ "text/plain": [
+ "\u001b[1;35m Flow started with ID: 8d81f08b-afd3-4713-be92-1327d8702d84\u001b[0m\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "application/vnd.jupyter.widget-view+json": {
+ "model_id": "e07bb2aa3e6c4c3499fb4da283bafe4e",
+ "version_major": 2,
+ "version_minor": 0
+ },
+ "text/plain": [
+ "Output()"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [
+ "/usr/local/lib/python3.12/dist-packages/ipywidgets/widgets/widget_output.py:111: DeprecationWarning: \n", + "Kernel._parent_header is deprecated in ipykernel 6. Use .get_parent()\n", + " if ip and hasattr(ip, 'kernel') and hasattr(ip.kernel, '_parent_header'):\n", + "\n" + ], + "text/plain": [ + "/usr/local/lib/python3.12/dist-packages/ipywidgets/widgets/widget_output.py:111: DeprecationWarning: \n", + "Kernel._parent_header is deprecated in ipykernel 6. Use .get_parent()\n", + " if ip and hasattr(ip, 'kernel') and hasattr(ip.kernel, '_parent_header'):\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
/usr/local/lib/python3.12/dist-packages/ipywidgets/widgets/widget_output.py:112: DeprecationWarning: \n", + "Kernel._parent_header is deprecated in ipykernel 6. Use .get_parent()\n", + " self.msg_id = ip.kernel._parent_header['header']['msg_id']\n", + "\n" + ], + "text/plain": [ + "/usr/local/lib/python3.12/dist-packages/ipywidgets/widgets/widget_output.py:112: DeprecationWarning: \n", + "Kernel._parent_header is deprecated in ipykernel 6. Use .get_parent()\n", + " self.msg_id = ip.kernel._parent_header['header']['msg_id']\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Enter your target URL: https://www.yahoo.com/news/articles/ftc-launches-inquiry-ai-chatbots-153035090.html?guccounter=1&guce_referrer=aHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS8&guce_referrer_sig=AQAAAHyaxWe9vR_wMDQVV_SHygSZCWuY2g3DZVG5zsA7FG57L7IcRS4pXEpPARguD-jFVynVi1wSiTp1Lq567Ye02Zv00d0BAlzNGGs7QwFkRoosBwYK_wMPSJ9fcafgYQVvSi8YVSRwZl_jJ3Xz-6H0CuTBSN6aOFeNtlaWfp_Mutdz\n", + "Enter your desired content type (blog, newsletter, or linkedin): linkedin\n" + ] + }, + { + "data": { + "text/html": [ + "
Saving flow state to memory for ID: 8d81f08b-afd3-4713-be92-1327d8702d84\n",
+ "\n"
+ ],
+ "text/plain": [
+ "\u001b[96m Saving flow state to memory for ID: 8d81f08b-afd3-4713-be92-1327d8702d84\u001b[0m\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [
+ " Saving flow state to memory for ID: 8d81f08b-afd3-4713-be92-1327d8702d84\n",
+ "\n"
+ ],
+ "text/plain": [
+ "\u001b[96m Saving flow state to memory for ID: 8d81f08b-afd3-4713-be92-1327d8702d84\u001b[0m\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [
+ "/usr/local/lib/python3.12/dist-packages/ipywidgets/widgets/widget_output.py:111: DeprecationWarning: \n", + "Kernel._parent_header is deprecated in ipykernel 6. Use .get_parent()\n", + " if ip and hasattr(ip, 'kernel') and hasattr(ip.kernel, '_parent_header'):\n", + "/usr/local/lib/python3.12/dist-packages/jupyter_client/session.py:203: DeprecationWarning: \n", + "datetime.datetime.utcnow() is deprecated and scheduled for removal in a future version. Use timezone-aware objects \n", + "to represent datetimes in UTC: datetime.datetime.now(datetime.UTC).\n", + " return datetime.utcnow().replace(tzinfo=utc)\n", + "\n" + ], + "text/plain": [ + "/usr/local/lib/python3.12/dist-packages/ipywidgets/widgets/widget_output.py:111: DeprecationWarning: \n", + "Kernel._parent_header is deprecated in ipykernel 6. Use .get_parent()\n", + " if ip and hasattr(ip, 'kernel') and hasattr(ip.kernel, '_parent_header'):\n", + "/usr/local/lib/python3.12/dist-packages/jupyter_client/session.py:203: DeprecationWarning: \n", + "datetime.datetime.utcnow() is deprecated and scheduled for removal in a future version. Use timezone-aware objects \n", + "to represent datetimes in UTC: datetime.datetime.now(datetime.UTC).\n", + " return datetime.utcnow().replace(tzinfo=utc)\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
/usr/local/lib/python3.12/dist-packages/ipywidgets/widgets/widget_output.py:111: DeprecationWarning: \n", + "Kernel._parent_header is deprecated in ipykernel 6. Use .get_parent()\n", + " if ip and hasattr(ip, 'kernel') and hasattr(ip.kernel, '_parent_header'):\n", + "\n" + ], + "text/plain": [ + "/usr/local/lib/python3.12/dist-packages/ipywidgets/widgets/widget_output.py:111: DeprecationWarning: \n", + "Kernel._parent_header is deprecated in ipykernel 6. Use .get_parent()\n", + " if ip and hasattr(ip, 'kernel') and hasattr(ip.kernel, '_parent_header'):\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
/usr/local/lib/python3.12/dist-packages/ipywidgets/widgets/widget_output.py:112: DeprecationWarning: \n", + "Kernel._parent_header is deprecated in ipykernel 6. Use .get_parent()\n", + " self.msg_id = ip.kernel._parent_header['header']['msg_id']\n", + "\n" + ], + "text/plain": [ + "/usr/local/lib/python3.12/dist-packages/ipywidgets/widgets/widget_output.py:112: DeprecationWarning: \n", + "Kernel._parent_header is deprecated in ipykernel 6. Use .get_parent()\n", + " self.msg_id = ip.kernel._parent_header['header']['msg_id']\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "\n" + ], + "text/plain": [] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
โญโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ Crew Execution Started โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ\n", + "โ โ\n", + "โ Crew Execution Started โ\n", + "โ Name: crew โ\n", + "โ ID: 7a98f308-6b3c-44d1-870d-607e77478b46 โ\n", + "โ Tool Args: โ\n", + "โ โ\n", + "โ โ\n", + "โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\n", + "\n" + ], + "text/plain": [ + "\u001b[36mโญโ\u001b[0m\u001b[36mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[36m Crew Execution Started \u001b[0m\u001b[36mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[36mโโฎ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[1;36mCrew Execution Started\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[37mName: \u001b[0m\u001b[36mcrew\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[37mID: \u001b[0m\u001b[36m7a98f308-6b3c-44d1-870d-607e77478b46\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[37mTool Args: \u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโ\u001b[0m \u001b[36mโ\u001b[0m\n", + "\u001b[36mโฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
\n", + "\n" + ], + "text/plain": [ + "\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "\n" + ], + "text/plain": [] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/usr/local/lib/python3.12/dist-packages/jupyter_client/session.py:203: DeprecationWarning: datetime.datetime.utcnow() is deprecated and scheduled for removal in a future version. Use timezone-aware objects to represent datetimes in UTC: datetime.datetime.now(datetime.UTC).\n", + " return datetime.utcnow().replace(tzinfo=utc)\n" + ] + }, + { + "data": { + "text/html": [ + "
โญโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ ๐ค Agent Started โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ\n", + "โ โ\n", + "โ Agent: LinkedIn Content Researcher โ\n", + "โ โ\n", + "โ Task: โ\n", + "โ Analyze the content from โ\n", + "โ https://www.yahoo.com/news/articles/ftc-launches-inquiry-ai-chatbots-153035090.html?guccounter=1&guce_referre โ\n", + "โ r=aHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS8&guce_referrer_sig=AQAAAHyaxWe9vR_wMDQVV_SHygSZCWuY2g3DZVG5zsA7FG57L7IcRS4pX โ\n", + "โ EpPARguD-jFVynVi1wSiTp1Lq567Ye02Zv00d0BAlzNGGs7QwFkRoosBwYK_wMPSJ9fcafgYQVvSi8YVSRwZl_jJ3Xz-6H0CuTBSN6aOFeNtl โ\n", + "โ aWfp_Mutdz and extract insights suitable for LinkedIn audience. โ\n", + "โ Consider what would engage LinkedIn's professional audience based on the content. โ\n", + "โ โ\n", + "โ โ\n", + "โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\n", + "\n" + ], + "text/plain": [ + "\u001b[35mโญโ\u001b[0m\u001b[35mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[35m ๐ค Agent Started \u001b[0m\u001b[35mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[35mโโฎ\u001b[0m\n", + "\u001b[35mโ\u001b[0m \u001b[35mโ\u001b[0m\n", + "\u001b[35mโ\u001b[0m \u001b[37mAgent: \u001b[0m\u001b[1;92mLinkedIn Content Researcher\u001b[0m \u001b[35mโ\u001b[0m\n", + "\u001b[35mโ\u001b[0m \u001b[35mโ\u001b[0m\n", + "\u001b[35mโ\u001b[0m \u001b[37mTask: \u001b[0m \u001b[35mโ\u001b[0m\n", + "\u001b[35mโ\u001b[0m \u001b[92m Analyze the content from \u001b[0m \u001b[35mโ\u001b[0m\n", + "\u001b[35mโ\u001b[0m \u001b[92mhttps://www.yahoo.com/news/articles/ftc-launches-inquiry-ai-chatbots-153035090.html?guccounter=1&guce_referre\u001b[0m \u001b[35mโ\u001b[0m\n", + "\u001b[35mโ\u001b[0m \u001b[92mr=aHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS8&guce_referrer_sig=AQAAAHyaxWe9vR_wMDQVV_SHygSZCWuY2g3DZVG5zsA7FG57L7IcRS4pX\u001b[0m \u001b[35mโ\u001b[0m\n", + "\u001b[35mโ\u001b[0m \u001b[92mEpPARguD-jFVynVi1wSiTp1Lq567Ye02Zv00d0BAlzNGGs7QwFkRoosBwYK_wMPSJ9fcafgYQVvSi8YVSRwZl_jJ3Xz-6H0CuTBSN6aOFeNtl\u001b[0m \u001b[35mโ\u001b[0m\n", + "\u001b[35mโ\u001b[0m \u001b[92maWfp_Mutdz and extract insights suitable for LinkedIn audience.\u001b[0m \u001b[35mโ\u001b[0m\n", + "\u001b[35mโ\u001b[0m \u001b[92m Consider what would engage LinkedIn's professional audience based on the content.\u001b[0m \u001b[35mโ\u001b[0m\n", + "\u001b[35mโ\u001b[0m \u001b[92m \u001b[0m \u001b[35mโ\u001b[0m\n", + "\u001b[35mโ\u001b[0m \u001b[35mโ\u001b[0m\n", + "\u001b[35mโฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
\n", + "\n" + ], + "text/plain": [ + "\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "aaec9eaaa69b4639b59e3745f104aee6", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Output()" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "\n" + ], + "text/plain": [] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/usr/local/lib/python3.12/dist-packages/jupyter_client/session.py:203: DeprecationWarning: datetime.datetime.utcnow() is deprecated and scheduled for removal in a future version. Use timezone-aware objects to represent datetimes in UTC: datetime.datetime.now(datetime.UTC).\n", + " return datetime.utcnow().replace(tzinfo=utc)\n" + ] + }, + { + "data": { + "text/html": [ + "
โญโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ Agent Final Answer โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ\n", + "โ โ\n", + "โ Agent: LinkedIn Content Researcher โ\n", + "โ โ\n", + "โ Final Answer: โ\n", + "โ The ongoing inquiry by the Federal Trade Commission (FTC) into the practices surrounding AI chatbots marks a โ\n", + "โ significant turning point in how businesses use artificial intelligence. As professionals in technology, โ\n", + "โ marketing, and ethics, we must acknowledge the implications of this development. โ\n", + "โ โ\n", + "โ 1. **Regulatory Landscape is Evolving**: The inquiry signifies a recognition of the potential risks AI โ\n", + "โ technologies pose, not just to consumers but also to businesses. Professionals should stay informed about โ\n", + "โ regulatory changes as they can directly impact how we develop, market, and implement AI solutions. โ\n", + "โ โ\n", + "โ 2. **Ethical AI Usage**: With rising concerns about user privacy and the accuracy of AI-generated content, โ\n", + "โ companies must prioritize ethical standards in their AI strategies. Engaging in discussions around best โ\n", + "โ practices for transparency and accountability will be essential for building trust with customers. โ\n", + "โ โ\n", + "โ 3. **Market Competitiveness**: Organizations utilizing AI chatbots will need to adapt quickly. Those โ\n", + "โ companies that can navigate the regulatory landscape while also innovating responsibly will likely gain a โ\n", + "โ competitive advantage. It's crucial for professionals to invest in skills that will enable them to understand โ\n", + "โ both the technological and regulatory aspects of AI. โ\n", + "โ โ\n", + "โ 4. **Collaboration and Learning**: The inquiry highlights the need for interdisciplinary cooperation. โ\n", + "โ Business leaders should seek collaboration not only within tech teams but also with legal experts, ethicists, โ\n", + "โ and consumer advocates to foster a balanced approach to AI chatbot deployment. โ\n", + "โ โ\n", + "โ 5. **Future Trends in AI**: Consider how these developments may influence future trends in AI. Professionals โ\n", + "โ should observe shifts in consumer sentiment towards AI interactions and prepare strategies to adapt their โ\n", + "โ approaches. Engaging with industry experts and forums can provide insights into emerging best practices. โ\n", + "โ โ\n", + "โ This inquiry represents a call to action for all professionals involved in AI: embrace ethical โ\n", + "โ considerations, stay informed on regulations, and continuously upgrade your skills to remain relevant in an โ\n", + "โ evolving landscape. As we anticipate the outcomes of the FTC's inquiry, letโs proactively prepare our โ\n", + "โ organizations to meet future challenges head-on. โ\n", + "โ โ\n", + "โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\n", + "\n" + ], + "text/plain": [ + "\u001b[32mโญโ\u001b[0m\u001b[32mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[32m โ Agent Final Answer \u001b[0m\u001b[32mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[32mโโฎ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[37mAgent: \u001b[0m\u001b[1;92mLinkedIn Content Researcher\u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[37mFinal Answer:\u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[92mThe ongoing inquiry by the Federal Trade Commission (FTC) into the practices surrounding AI chatbots marks a \u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[92msignificant turning point in how businesses use artificial intelligence. As professionals in technology, \u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[92mmarketing, and ethics, we must acknowledge the implications of this development. \u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[92m1. **Regulatory Landscape is Evolving**: The inquiry signifies a recognition of the potential risks AI \u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[92mtechnologies pose, not just to consumers but also to businesses. Professionals should stay informed about \u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[92mregulatory changes as they can directly impact how we develop, market, and implement AI solutions.\u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[92m2. **Ethical AI Usage**: With rising concerns about user privacy and the accuracy of AI-generated content, \u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[92mcompanies must prioritize ethical standards in their AI strategies. Engaging in discussions around best \u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[92mpractices for transparency and accountability will be essential for building trust with customers.\u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[92m3. **Market Competitiveness**: Organizations utilizing AI chatbots will need to adapt quickly. Those \u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[92mcompanies that can navigate the regulatory landscape while also innovating responsibly will likely gain a \u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[92mcompetitive advantage. It's crucial for professionals to invest in skills that will enable them to understand\u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[92mboth the technological and regulatory aspects of AI.\u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[92m4. **Collaboration and Learning**: The inquiry highlights the need for interdisciplinary cooperation. \u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[92mBusiness leaders should seek collaboration not only within tech teams but also with legal experts, ethicists,\u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[92mand consumer advocates to foster a balanced approach to AI chatbot deployment.\u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[92m5. **Future Trends in AI**: Consider how these developments may influence future trends in AI. Professionals \u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[92mshould observe shifts in consumer sentiment towards AI interactions and prepare strategies to adapt their \u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[92mapproaches. Engaging with industry experts and forums can provide insights into emerging best practices.\u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[92mThis inquiry represents a call to action for all professionals involved in AI: embrace ethical \u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[92mconsiderations, stay informed on regulations, and continuously upgrade your skills to remain relevant in an \u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[92mevolving landscape. As we anticipate the outcomes of the FTC's inquiry, letโs proactively prepare our \u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[92morganizations to meet future challenges head-on.\u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
\n", + "\n" + ], + "text/plain": [ + "\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "\n" + ], + "text/plain": [] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
โญโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ Task Completion โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ\n", + "โ โ\n", + "โ Task Completed โ\n", + "โ Name: fc884895-8335-4f5c-a521-3ba8f9b390cf โ\n", + "โ Agent: LinkedIn Content Researcher โ\n", + "โ Tool Args: โ\n", + "โ โ\n", + "โ โ\n", + "โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\n", + "\n" + ], + "text/plain": [ + "\u001b[32mโญโ\u001b[0m\u001b[32mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[32m Task Completion \u001b[0m\u001b[32mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[32mโโฎ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[1;32mTask Completed\u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[37mName: \u001b[0m\u001b[32mfc884895-8335-4f5c-a521-3ba8f9b390cf\u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[37mAgent: \u001b[0m\u001b[32mLinkedIn Content Researcher\u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[37mTool Args: \u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
\n", + "\n" + ], + "text/plain": [ + "\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "\n" + ], + "text/plain": [] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/usr/local/lib/python3.12/dist-packages/jupyter_client/session.py:203: DeprecationWarning: datetime.datetime.utcnow() is deprecated and scheduled for removal in a future version. Use timezone-aware objects to represent datetimes in UTC: datetime.datetime.now(datetime.UTC).\n", + " return datetime.utcnow().replace(tzinfo=utc)\n" + ] + }, + { + "data": { + "text/html": [ + "
โญโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ ๐ค Agent Started โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ\n", + "โ โ\n", + "โ Agent: LinkedIn Content Writer โ\n", + "โ โ\n", + "โ Task: โ\n", + "โ Create an engaging LinkedIn post based on the research. โ\n", + "โ โ\n", + "โ Requirements: โ\n", + "โ - 150-300 words (optimal LinkedIn length) โ\n", + "โ - Professional yet conversational tone โ\n", + "โ - Include relevant hashtags (3-5) โ\n", + "โ - Pose a question to encourage engagement โ\n", + "โ - Share a key insight or lesson learned from the content โ\n", + "โ - Use line breaks for readability โ\n", + "โ - Include a call-to-action for comments โ\n", + "โ โ\n", + "โ Make it shareable and discussion-worthy. โ\n", + "โ โ\n", + "โ โ\n", + "โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\n", + "\n" + ], + "text/plain": [ + "\u001b[35mโญโ\u001b[0m\u001b[35mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[35m ๐ค Agent Started \u001b[0m\u001b[35mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[35mโโฎ\u001b[0m\n", + "\u001b[35mโ\u001b[0m \u001b[35mโ\u001b[0m\n", + "\u001b[35mโ\u001b[0m \u001b[37mAgent: \u001b[0m\u001b[1;92mLinkedIn Content Writer\u001b[0m \u001b[35mโ\u001b[0m\n", + "\u001b[35mโ\u001b[0m \u001b[35mโ\u001b[0m\n", + "\u001b[35mโ\u001b[0m \u001b[37mTask: \u001b[0m \u001b[35mโ\u001b[0m\n", + "\u001b[35mโ\u001b[0m \u001b[92m Create an engaging LinkedIn post based on the research.\u001b[0m \u001b[35mโ\u001b[0m\n", + "\u001b[35mโ\u001b[0m \u001b[35mโ\u001b[0m\n", + "\u001b[35mโ\u001b[0m \u001b[92m Requirements:\u001b[0m \u001b[35mโ\u001b[0m\n", + "\u001b[35mโ\u001b[0m \u001b[92m - 150-300 words (optimal LinkedIn length)\u001b[0m \u001b[35mโ\u001b[0m\n", + "\u001b[35mโ\u001b[0m \u001b[92m - Professional yet conversational tone\u001b[0m \u001b[35mโ\u001b[0m\n", + "\u001b[35mโ\u001b[0m \u001b[92m - Include relevant hashtags (3-5)\u001b[0m \u001b[35mโ\u001b[0m\n", + "\u001b[35mโ\u001b[0m \u001b[92m - Pose a question to encourage engagement\u001b[0m \u001b[35mโ\u001b[0m\n", + "\u001b[35mโ\u001b[0m \u001b[92m - Share a key insight or lesson learned from the content\u001b[0m \u001b[35mโ\u001b[0m\n", + "\u001b[35mโ\u001b[0m \u001b[92m - Use line breaks for readability\u001b[0m \u001b[35mโ\u001b[0m\n", + "\u001b[35mโ\u001b[0m \u001b[92m - Include a call-to-action for comments\u001b[0m \u001b[35mโ\u001b[0m\n", + "\u001b[35mโ\u001b[0m \u001b[35mโ\u001b[0m\n", + "\u001b[35mโ\u001b[0m \u001b[92m Make it shareable and discussion-worthy.\u001b[0m \u001b[35mโ\u001b[0m\n", + "\u001b[35mโ\u001b[0m \u001b[92m \u001b[0m \u001b[35mโ\u001b[0m\n", + "\u001b[35mโ\u001b[0m \u001b[35mโ\u001b[0m\n", + "\u001b[35mโฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
\n", + "\n" + ], + "text/plain": [ + "\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "fe3bc2013ef34446ae3370cb67603449", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Output()" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "\n" + ], + "text/plain": [] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/usr/local/lib/python3.12/dist-packages/jupyter_client/session.py:203: DeprecationWarning: datetime.datetime.utcnow() is deprecated and scheduled for removal in a future version. Use timezone-aware objects to represent datetimes in UTC: datetime.datetime.now(datetime.UTC).\n", + " return datetime.utcnow().replace(tzinfo=utc)\n" + ] + }, + { + "data": { + "text/html": [ + "
โญโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ Agent Final Answer โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ\n", + "โ โ\n", + "โ Agent: LinkedIn Content Writer โ\n", + "โ โ\n", + "โ Final Answer: โ\n", + "โ ๐ **Navigating the AI Landscape: Compliance, Ethics, and Innovation** ๐ โ\n", + "โ โ\n", + "โ The ongoing inquiry by the Federal Trade Commission (FTC) into AI chatbot practices is a pivotal moment for โ\n", + "โ all of us in the technology, marketing, and ethics sectors. This is not just a regulatory checkโit's a โ\n", + "โ wake-up call for responsible innovation. โ\n", + "โ โ\n", + "โ Here are key insights: โ\n", + "โ โ\n", + "โ 1. **Evolving Regulatory Landscape**: Stay updated on regulatory changes; they will shape how we develop and โ\n", + "โ implement AI solutions. โ\n", + "โ 2. **Ethical AI Usage**: Prioritizing privacy and accuracy in AI responses is vital for building trust with โ\n", + "โ our usersโletโs discuss how we can uphold these standards. โ\n", + "โ 3. **Market Competitiveness**: Those who can balance innovation with regulatory compliance will lead the โ\n", + "โ market. Are you ready to adapt? โ\n", + "โ 4. **Collaboration is Key**: Engaging with legal experts and ethicists can foster a balanced approach to AI โ\n", + "โ deployment. โ\n", + "โ โ\n", + "โ As the landscape shifts, we must focus on collaborating, learning, and evolving our skill sets. Let's embrace โ\n", + "โ ethical considerations and enhance our understanding of regulations. โ\n", + "โ โ\n", + "โ ๐ **Question for You**: How is your organization preparing for the impending regulatory changes surrounding โ\n", + "โ AI? โ\n", + "โ โ\n", + "โ Let's spark this conversation! Comment below and share your insights. ๐ โ\n", + "โ โ\n", + "โ #ArtificialIntelligence #EthicalAI #MarketInnovation #FTCInquiry #Collaboration โ\n", + "โ โ\n", + "โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\n", + "\n" + ], + "text/plain": [ + "\u001b[32mโญโ\u001b[0m\u001b[32mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[32m โ Agent Final Answer \u001b[0m\u001b[32mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[32mโโฎ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[37mAgent: \u001b[0m\u001b[1;92mLinkedIn Content Writer\u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[37mFinal Answer:\u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[92m๐ **Navigating the AI Landscape: Compliance, Ethics, and Innovation** ๐ \u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[92mThe ongoing inquiry by the Federal Trade Commission (FTC) into AI chatbot practices is a pivotal moment for \u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[92mall of us in the technology, marketing, and ethics sectors. This is not just a regulatory checkโit's a \u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[92mwake-up call for responsible innovation. \u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[92mHere are key insights: \u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[92m1. **Evolving Regulatory Landscape**: Stay updated on regulatory changes; they will shape how we develop and \u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[92mimplement AI solutions. \u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[92m2. **Ethical AI Usage**: Prioritizing privacy and accuracy in AI responses is vital for building trust with \u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[92mour usersโletโs discuss how we can uphold these standards. \u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[92m3. **Market Competitiveness**: Those who can balance innovation with regulatory compliance will lead the \u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[92mmarket. Are you ready to adapt? \u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[92m4. **Collaboration is Key**: Engaging with legal experts and ethicists can foster a balanced approach to AI \u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[92mdeployment. \u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[92mAs the landscape shifts, we must focus on collaborating, learning, and evolving our skill sets. Let's embrace\u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[92methical considerations and enhance our understanding of regulations. \u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[92m๐ **Question for You**: How is your organization preparing for the impending regulatory changes surrounding \u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[92mAI? \u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[92mLet's spark this conversation! Comment below and share your insights. ๐ \u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[92m#ArtificialIntelligence #EthicalAI #MarketInnovation #FTCInquiry #Collaboration\u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
\n", + "\n" + ], + "text/plain": [ + "\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "\n" + ], + "text/plain": [] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
โญโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ Task Completion โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ\n", + "โ โ\n", + "โ Task Completed โ\n", + "โ Name: 0bfd714e-29d6-476e-a04a-1d1d91c4b2b8 โ\n", + "โ Agent: LinkedIn Content Writer โ\n", + "โ Tool Args: โ\n", + "โ โ\n", + "โ โ\n", + "โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\n", + "\n" + ], + "text/plain": [ + "\u001b[32mโญโ\u001b[0m\u001b[32mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[32m Task Completion \u001b[0m\u001b[32mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[32mโโฎ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[1;32mTask Completed\u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[37mName: \u001b[0m\u001b[32m0bfd714e-29d6-476e-a04a-1d1d91c4b2b8\u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[37mAgent: \u001b[0m\u001b[32mLinkedIn Content Writer\u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[37mTool Args: \u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
\n", + "\n" + ], + "text/plain": [ + "\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
โญโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ Crew Completion โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ\n", + "โ โ\n", + "โ Crew Execution Completed โ\n", + "โ Name: crew โ\n", + "โ ID: 7a98f308-6b3c-44d1-870d-607e77478b46 โ\n", + "โ Tool Args: โ\n", + "โ Final Output: ๐ **Navigating the AI Landscape: Compliance, Ethics, and Innovation** ๐ โ\n", + "โ โ\n", + "โ The ongoing inquiry by the Federal Trade Commission (FTC) into AI chatbot practices is a pivotal moment for โ\n", + "โ all of us in the technology, marketing, and ethics sectors. This is not just a regulatory checkโit's a โ\n", + "โ wake-up call for responsible innovation. โ\n", + "โ โ\n", + "โ Here are key insights: โ\n", + "โ โ\n", + "โ 1. **Evolving Regulatory Landscape**: Stay updated on regulatory changes; they will shape how we develop and โ\n", + "โ implement AI solutions. โ\n", + "โ 2. **Ethical AI Usage**: Prioritizing privacy and accuracy in AI responses is vital for building trust with โ\n", + "โ our usersโletโs discuss how we can uphold these standards. โ\n", + "โ 3. **Market Competitiveness**: Those who can balance innovation with regulatory compliance will lead the โ\n", + "โ market. Are you ready to adapt? โ\n", + "โ 4. **Collaboration is Key**: Engaging with legal experts and ethicists can foster a balanced approach to AI โ\n", + "โ deployment. โ\n", + "โ โ\n", + "โ As the landscape shifts, we must focus on collaborating, learning, and evolving our skill sets. Let's embrace โ\n", + "โ ethical considerations and enhance our understanding of regulations. โ\n", + "โ โ\n", + "โ ๐ **Question for You**: How is your organization preparing for the impending regulatory changes surrounding โ\n", + "โ AI? โ\n", + "โ โ\n", + "โ Let's spark this conversation! Comment below and share your insights. ๐ โ\n", + "โ โ\n", + "โ #ArtificialIntelligence #EthicalAI #MarketInnovation #FTCInquiry #Collaboration โ\n", + "โ โ\n", + "โ โ\n", + "โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\n", + "\n" + ], + "text/plain": [ + "\u001b[32mโญโ\u001b[0m\u001b[32mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[32m Crew Completion \u001b[0m\u001b[32mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[32mโโฎ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[1;32mCrew Execution Completed\u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[37mName: \u001b[0m\u001b[32mcrew\u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[37mID: \u001b[0m\u001b[32m7a98f308-6b3c-44d1-870d-607e77478b46\u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[37mTool Args: \u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[37mFinal Output: ๐ **Navigating the AI Landscape: Compliance, Ethics, and Innovation** ๐ \u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[37mThe ongoing inquiry by the Federal Trade Commission (FTC) into AI chatbot practices is a pivotal moment for \u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[37mall of us in the technology, marketing, and ethics sectors. This is not just a regulatory checkโit's a \u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[37mwake-up call for responsible innovation. \u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[37mHere are key insights: \u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[37m1. **Evolving Regulatory Landscape**: Stay updated on regulatory changes; they will shape how we develop and \u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[37mimplement AI solutions. \u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[37m2. **Ethical AI Usage**: Prioritizing privacy and accuracy in AI responses is vital for building trust with \u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[37mour usersโletโs discuss how we can uphold these standards. \u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[37m3. **Market Competitiveness**: Those who can balance innovation with regulatory compliance will lead the \u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[37mmarket. Are you ready to adapt? \u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[37m4. **Collaboration is Key**: Engaging with legal experts and ethicists can foster a balanced approach to AI \u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[37mdeployment. \u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[37mAs the landscape shifts, we must focus on collaborating, learning, and evolving our skill sets. Let's embrace\u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[37methical considerations and enhance our understanding of regulations. \u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[37m๐ **Question for You**: How is your organization preparing for the impending regulatory changes surrounding \u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[37mAI? \u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[37mLet's spark this conversation! Comment below and share your insights. ๐ \u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[37m#ArtificialIntelligence #EthicalAI #MarketInnovation #FTCInquiry #Collaboration\u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
\n", + "\n" + ], + "text/plain": [ + "\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "d7e08ec3db57486cb1123a2330af3d2b", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Output()" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
/usr/local/lib/python3.12/dist-packages/ipywidgets/widgets/widget_output.py:111: DeprecationWarning: \n", + "Kernel._parent_header is deprecated in ipykernel 6. Use .get_parent()\n", + " if ip and hasattr(ip, 'kernel') and hasattr(ip.kernel, '_parent_header'):\n", + "\n" + ], + "text/plain": [ + "/usr/local/lib/python3.12/dist-packages/ipywidgets/widgets/widget_output.py:111: DeprecationWarning: \n", + "Kernel._parent_header is deprecated in ipykernel 6. Use .get_parent()\n", + " if ip and hasattr(ip, 'kernel') and hasattr(ip.kernel, '_parent_header'):\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
/usr/local/lib/python3.12/dist-packages/ipywidgets/widgets/widget_output.py:112: DeprecationWarning: \n", + "Kernel._parent_header is deprecated in ipykernel 6. Use .get_parent()\n", + " self.msg_id = ip.kernel._parent_header['header']['msg_id']\n", + "\n" + ], + "text/plain": [ + "/usr/local/lib/python3.12/dist-packages/ipywidgets/widgets/widget_output.py:112: DeprecationWarning: \n", + "Kernel._parent_header is deprecated in ipykernel 6. Use .get_parent()\n", + " self.msg_id = ip.kernel._parent_header['header']['msg_id']\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[96m Saving flow state to memory for ID: 8d81f08b-afd3-4713-be92-1327d8702d84\u001b[00m\n" + ] + }, + { + "data": { + "text/html": [ + "\n" + ], + "text/plain": [] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
โญโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ Flow Completion โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ\n", + "โ โ\n", + "โ Flow Execution Completed โ\n", + "โ Name: ContentRouterFlow โ\n", + "โ ID: 8d81f08b-afd3-4713-be92-1327d8702d84 โ\n", + "โ Tool Args: โ\n", + "โ โ\n", + "โ โ\n", + "โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\n", + "\n" + ], + "text/plain": [ + "\u001b[32mโญโ\u001b[0m\u001b[32mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[32m Flow Completion \u001b[0m\u001b[32mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\u001b[0m\u001b[32mโโฎ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[1;32mFlow Execution Completed\u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[37mName: \u001b[0m\u001b[32mContentRouterFlow\u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[37mID: \u001b[0m\u001b[32m8d81f08b-afd3-4713-be92-1327d8702d84\u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[37mTool Args: \u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโ\u001b[0m \u001b[32mโ\u001b[0m\n", + "\u001b[32mโฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
\n", + "\n" + ], + "text/plain": [ + "\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import asyncio\n", + "\n", + "# Create and run the flow\n", + "flow = ContentRouterFlow()\n", + "result = await flow.kickoff_async()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "cu89Vp2Ekh7k" + }, + "source": [ + "Now that the run has completed, let's access the final content saved in our state via **`flow.state.final_content`**" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 385 + }, + "id": "G8xptaEAi5kT", + "outputId": "297dde5d-585c-4ee0-c77f-5884f6f2e748" + }, + "outputs": [ + { + "data": { + "text/markdown": [ + "---" + ], + "text/plain": [ + "