Notebooks
L
LanceDB
Assistant Bot With Swarm

Assistant Bot With Swarm

agentsllmsassistance-bot-with-swarmvector-databaselancedbgptopenaiAImultimodal-aimachine-learningembeddingsfine-tuningexamplesdeep-learninggpt-4-visionllama-indexragmultimodallangchainlancedb-recipes

Assistant bot with OpenAI's Swarm

This example shows a customer service bot that has two parts: one for interacting with users and another for providing help. It includes tools to assist in these tasks. The run_demo_loop function helps us create an interactive demo session.

Overview

The support bot has two main parts:

  1. User Interface Agent: This part interacts with users at first and directs them to the help center based on what they need.
  2. Help Center Agent: This part offers detailed help and support using various tools and is connected to a LanceDB VectorDB to retrieve documents.

Screenshot from 2024-10-24 11-47-07.png

Install requirements

[1]
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 27.1/27.1 MB 50.7 MB/s eta 0:00:00
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 30.4/30.4 MB 18.3 MB/s eta 0:00:00
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 480.6/480.6 kB 21.8 MB/s eta 0:00:00
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 116.3/116.3 kB 7.4 MB/s eta 0:00:00
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 179.3/179.3 kB 12.2 MB/s eta 0:00:00
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 134.8/134.8 kB 8.5 MB/s eta 0:00:00
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 194.1/194.1 kB 12.5 MB/s eta 0:00:00
ERROR: 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.
gcsfs 2024.10.0 requires fsspec==2024.10.0, but you have fsspec 2024.9.0 which is incompatible.
Collecting git+https://github.com/openai/swarm.git
  Cloning https://github.com/openai/swarm.git to /tmp/pip-req-build-y08wdobn
  Running command git clone --filter=blob:none --quiet https://github.com/openai/swarm.git /tmp/pip-req-build-y08wdobn
  Resolved https://github.com/openai/swarm.git to commit 9db581cecaacea0d46a933d6453c312b034dbf47
  Installing build dependencies ... done
  Getting requirements to build wheel ... done
  Preparing metadata (pyproject.toml) ... done
Requirement already satisfied: numpy in /usr/local/lib/python3.10/dist-packages (from swarm==0.1.0) (1.26.4)
Requirement already satisfied: openai>=1.33.0 in /usr/local/lib/python3.10/dist-packages (from swarm==0.1.0) (1.52.2)
Requirement already satisfied: pytest in /usr/local/lib/python3.10/dist-packages (from swarm==0.1.0) (7.4.4)
Requirement already satisfied: requests in /usr/local/lib/python3.10/dist-packages (from swarm==0.1.0) (2.32.3)
Requirement already satisfied: tqdm in /usr/local/lib/python3.10/dist-packages (from swarm==0.1.0) (4.66.6)
Collecting pre-commit (from swarm==0.1.0)
  Downloading pre_commit-4.0.1-py2.py3-none-any.whl.metadata (1.3 kB)
Collecting instructor (from swarm==0.1.0)
  Downloading instructor-1.6.3-py3-none-any.whl.metadata (17 kB)
Requirement already satisfied: anyio<5,>=3.5.0 in /usr/local/lib/python3.10/dist-packages (from openai>=1.33.0->swarm==0.1.0) (3.7.1)
Requirement already satisfied: distro<2,>=1.7.0 in /usr/local/lib/python3.10/dist-packages (from openai>=1.33.0->swarm==0.1.0) (1.9.0)
Requirement already satisfied: httpx<1,>=0.23.0 in /usr/local/lib/python3.10/dist-packages (from openai>=1.33.0->swarm==0.1.0) (0.27.2)
Requirement already satisfied: jiter<1,>=0.4.0 in /usr/local/lib/python3.10/dist-packages (from openai>=1.33.0->swarm==0.1.0) (0.6.1)
Requirement already satisfied: pydantic<3,>=1.9.0 in /usr/local/lib/python3.10/dist-packages (from openai>=1.33.0->swarm==0.1.0) (2.9.2)
Requirement already satisfied: sniffio in /usr/local/lib/python3.10/dist-packages (from openai>=1.33.0->swarm==0.1.0) (1.3.1)
Requirement already satisfied: typing-extensions<5,>=4.11 in /usr/local/lib/python3.10/dist-packages (from openai>=1.33.0->swarm==0.1.0) (4.12.2)
Requirement already satisfied: aiohttp<4.0.0,>=3.9.1 in /usr/local/lib/python3.10/dist-packages (from instructor->swarm==0.1.0) (3.10.10)
Requirement already satisfied: docstring-parser<0.17,>=0.16 in /usr/local/lib/python3.10/dist-packages (from instructor->swarm==0.1.0) (0.16)
Requirement already satisfied: jinja2<4.0.0,>=3.1.4 in /usr/local/lib/python3.10/dist-packages (from instructor->swarm==0.1.0) (3.1.4)
Collecting jiter<1,>=0.4.0 (from openai>=1.33.0->swarm==0.1.0)
  Downloading jiter-0.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (3.6 kB)
Requirement already satisfied: pydantic-core<3.0.0,>=2.18.0 in /usr/local/lib/python3.10/dist-packages (from instructor->swarm==0.1.0) (2.23.4)
Requirement already satisfied: rich<14.0.0,>=13.7.0 in /usr/local/lib/python3.10/dist-packages (from instructor->swarm==0.1.0) (13.9.3)
Requirement already satisfied: tenacity<10.0.0,>=9.0.0 in /usr/local/lib/python3.10/dist-packages (from instructor->swarm==0.1.0) (9.0.0)
Requirement already satisfied: typer<1.0.0,>=0.9.0 in /usr/local/lib/python3.10/dist-packages (from instructor->swarm==0.1.0) (0.12.5)
Collecting cfgv>=2.0.0 (from pre-commit->swarm==0.1.0)
  Downloading cfgv-3.4.0-py2.py3-none-any.whl.metadata (8.5 kB)
Collecting identify>=1.0.0 (from pre-commit->swarm==0.1.0)
  Downloading identify-2.6.1-py2.py3-none-any.whl.metadata (4.4 kB)
Collecting nodeenv>=0.11.1 (from pre-commit->swarm==0.1.0)
  Downloading nodeenv-1.9.1-py2.py3-none-any.whl.metadata (21 kB)
Requirement already satisfied: pyyaml>=5.1 in /usr/local/lib/python3.10/dist-packages (from pre-commit->swarm==0.1.0) (6.0.2)
Collecting virtualenv>=20.10.0 (from pre-commit->swarm==0.1.0)
  Downloading virtualenv-20.27.1-py3-none-any.whl.metadata (4.5 kB)
Requirement already satisfied: iniconfig in /usr/local/lib/python3.10/dist-packages (from pytest->swarm==0.1.0) (2.0.0)
Requirement already satisfied: packaging in /usr/local/lib/python3.10/dist-packages (from pytest->swarm==0.1.0) (24.1)
Requirement already satisfied: pluggy<2.0,>=0.12 in /usr/local/lib/python3.10/dist-packages (from pytest->swarm==0.1.0) (1.5.0)
Requirement already satisfied: exceptiongroup>=1.0.0rc8 in /usr/local/lib/python3.10/dist-packages (from pytest->swarm==0.1.0) (1.2.2)
Requirement already satisfied: tomli>=1.0.0 in /usr/local/lib/python3.10/dist-packages (from pytest->swarm==0.1.0) (2.0.2)
Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.10/dist-packages (from requests->swarm==0.1.0) (3.4.0)
Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.10/dist-packages (from requests->swarm==0.1.0) (3.10)
Requirement already satisfied: urllib3<3,>=1.21.1 in /usr/local/lib/python3.10/dist-packages (from requests->swarm==0.1.0) (2.2.3)
Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.10/dist-packages (from requests->swarm==0.1.0) (2024.8.30)
Requirement already satisfied: aiohappyeyeballs>=2.3.0 in /usr/local/lib/python3.10/dist-packages (from aiohttp<4.0.0,>=3.9.1->instructor->swarm==0.1.0) (2.4.3)
Requirement already satisfied: aiosignal>=1.1.2 in /usr/local/lib/python3.10/dist-packages (from aiohttp<4.0.0,>=3.9.1->instructor->swarm==0.1.0) (1.3.1)
Requirement already satisfied: attrs>=17.3.0 in /usr/local/lib/python3.10/dist-packages (from aiohttp<4.0.0,>=3.9.1->instructor->swarm==0.1.0) (24.2.0)
Requirement already satisfied: frozenlist>=1.1.1 in /usr/local/lib/python3.10/dist-packages (from aiohttp<4.0.0,>=3.9.1->instructor->swarm==0.1.0) (1.5.0)
Requirement already satisfied: multidict<7.0,>=4.5 in /usr/local/lib/python3.10/dist-packages (from aiohttp<4.0.0,>=3.9.1->instructor->swarm==0.1.0) (6.1.0)
Requirement already satisfied: yarl<2.0,>=1.12.0 in /usr/local/lib/python3.10/dist-packages (from aiohttp<4.0.0,>=3.9.1->instructor->swarm==0.1.0) (1.17.0)
Requirement already satisfied: async-timeout<5.0,>=4.0 in /usr/local/lib/python3.10/dist-packages (from aiohttp<4.0.0,>=3.9.1->instructor->swarm==0.1.0) (4.0.3)
Requirement already satisfied: httpcore==1.* in /usr/local/lib/python3.10/dist-packages (from httpx<1,>=0.23.0->openai>=1.33.0->swarm==0.1.0) (1.0.6)
Requirement already satisfied: h11<0.15,>=0.13 in /usr/local/lib/python3.10/dist-packages (from httpcore==1.*->httpx<1,>=0.23.0->openai>=1.33.0->swarm==0.1.0) (0.14.0)
Requirement already satisfied: MarkupSafe>=2.0 in /usr/local/lib/python3.10/dist-packages (from jinja2<4.0.0,>=3.1.4->instructor->swarm==0.1.0) (3.0.2)
Requirement already satisfied: annotated-types>=0.6.0 in /usr/local/lib/python3.10/dist-packages (from pydantic<3,>=1.9.0->openai>=1.33.0->swarm==0.1.0) (0.7.0)
Requirement already satisfied: markdown-it-py>=2.2.0 in /usr/local/lib/python3.10/dist-packages (from rich<14.0.0,>=13.7.0->instructor->swarm==0.1.0) (3.0.0)
Requirement already satisfied: pygments<3.0.0,>=2.13.0 in /usr/local/lib/python3.10/dist-packages (from rich<14.0.0,>=13.7.0->instructor->swarm==0.1.0) (2.18.0)
Requirement already satisfied: click>=8.0.0 in /usr/local/lib/python3.10/dist-packages (from typer<1.0.0,>=0.9.0->instructor->swarm==0.1.0) (8.1.7)
Requirement already satisfied: shellingham>=1.3.0 in /usr/local/lib/python3.10/dist-packages (from typer<1.0.0,>=0.9.0->instructor->swarm==0.1.0) (1.5.4)
Collecting distlib<1,>=0.3.7 (from virtualenv>=20.10.0->pre-commit->swarm==0.1.0)
  Downloading distlib-0.3.9-py2.py3-none-any.whl.metadata (5.2 kB)
Requirement already satisfied: filelock<4,>=3.12.2 in /usr/local/lib/python3.10/dist-packages (from virtualenv>=20.10.0->pre-commit->swarm==0.1.0) (3.16.1)
Requirement already satisfied: platformdirs<5,>=3.9.1 in /usr/local/lib/python3.10/dist-packages (from virtualenv>=20.10.0->pre-commit->swarm==0.1.0) (4.3.6)
Requirement already satisfied: mdurl~=0.1 in /usr/local/lib/python3.10/dist-packages (from markdown-it-py>=2.2.0->rich<14.0.0,>=13.7.0->instructor->swarm==0.1.0) (0.1.2)
Requirement already satisfied: propcache>=0.2.0 in /usr/local/lib/python3.10/dist-packages (from yarl<2.0,>=1.12.0->aiohttp<4.0.0,>=3.9.1->instructor->swarm==0.1.0) (0.2.0)
Downloading instructor-1.6.3-py3-none-any.whl (69 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 69.4/69.4 kB 317.7 kB/s eta 0:00:00
Downloading pre_commit-4.0.1-py2.py3-none-any.whl (218 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 218.7/218.7 kB 15.8 MB/s eta 0:00:00
Downloading cfgv-3.4.0-py2.py3-none-any.whl (7.2 kB)
Downloading identify-2.6.1-py2.py3-none-any.whl (98 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 99.0/99.0 kB 9.2 MB/s eta 0:00:00
Downloading jiter-0.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (318 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 318.9/318.9 kB 19.9 MB/s eta 0:00:00
Downloading nodeenv-1.9.1-py2.py3-none-any.whl (22 kB)
Downloading virtualenv-20.27.1-py3-none-any.whl (3.1 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.1/3.1 MB 61.2 MB/s eta 0:00:00
Downloading distlib-0.3.9-py2.py3-none-any.whl (468 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 469.0/469.0 kB 31.9 MB/s eta 0:00:00
Building wheels for collected packages: swarm
  Building wheel for swarm (pyproject.toml) ... done
  Created wheel for swarm: filename=swarm-0.1.0-py3-none-any.whl size=26001 sha256=96dda8970a55a6a8126a1cdbeac38d851c86377316b432f281d8ace8dabde629
  Stored in directory: /tmp/pip-ephem-wheel-cache-ajq90ruf/wheels/46/9a/f7/7b8bbb674ae80ef0f62a632706c2c4cdfcf708e4da32e4e256
Successfully built swarm
Installing collected packages: distlib, virtualenv, nodeenv, jiter, identify, cfgv, pre-commit, instructor, swarm
  Attempting uninstall: jiter
    Found existing installation: jiter 0.6.1
    Uninstalling jiter-0.6.1:
      Successfully uninstalled jiter-0.6.1
Successfully installed cfgv-3.4.0 distlib-0.3.9 identify-2.6.1 instructor-1.6.3 jiter-0.5.0 nodeenv-1.9.1 pre-commit-4.0.1 swarm-0.1.0 virtualenv-20.27.1

set OPENAI Key as Env variable

[2]

Prepare and Ingest dataset

[3]
/usr/local/lib/python3.10/dist-packages/huggingface_hub/utils/_token.py:89: UserWarning: 
The secret `HF_TOKEN` does not exist in your Colab secrets.
To authenticate with the Hugging Face Hub, create a token in your settings tab (https://huggingface.co/settings/tokens), set it as secret in your Google Colab and restart your session.
You will be able to reuse this secret in all of your notebooks.
Please note that authentication is recommended but still optional to access public models or datasets.
  warnings.warn(
Resolving data files:   0%|          | 0/76 [00:00<?, ?it/s]
Downloading data:   0%|          | 0/76 [00:00<?, ?files/s]
article_6338765.json:   0%|          | 0.00/823 [00:00<?, ?B/s]
article_6378378.json:   0%|          | 0.00/683 [00:00<?, ?B/s]
article_6283125.json:   0%|          | 0.00/2.97k [00:00<?, ?B/s]
article_6272952.json:   0%|          | 0.00/4.74k [00:00<?, ?B/s]
article_6485334.json:   0%|          | 0.00/3.27k [00:00<?, ?B/s]
article_6402865.json:   0%|          | 0.00/306 [00:00<?, ?B/s]
article_6399305.json:   0%|          | 0.00/1.98k [00:00<?, ?B/s]
article_6431339.json:   0%|          | 0.00/298 [00:00<?, ?B/s]
article_6378407.json:   0%|          | 0.00/8.30k [00:00<?, ?B/s]
article_6431922.json:   0%|          | 0.00/438 [00:00<?, ?B/s]
article_6233728.json:   0%|          | 0.00/7.78k [00:00<?, ?B/s]
article_6425277.json:   0%|          | 0.00/509 [00:00<?, ?B/s]
article_6338764.json:   0%|          | 0.00/2.28k [00:00<?, ?B/s]
article_6272941.json:   0%|          | 0.00/8.08k [00:00<?, ?B/s]
article_6503842.json:   0%|          | 0.00/835 [00:00<?, ?B/s]
article_6468065.json:   0%|          | 0.00/2.41k [00:00<?, ?B/s]
article_6582257.json:   0%|          | 0.00/891 [00:00<?, ?B/s]
article_6516417.json:   0%|          | 0.00/4.38k [00:00<?, ?B/s]
article_6582391.json:   0%|          | 0.00/1.11k [00:00<?, ?B/s]
article_6614161.json:   0%|          | 0.00/581 [00:00<?, ?B/s]
article_6584194.json:   0%|          | 0.00/673 [00:00<?, ?B/s]
article_6613629.json:   0%|          | 0.00/2.36k [00:00<?, ?B/s]
article_6613520.json:   0%|          | 0.00/6.37k [00:00<?, ?B/s]
article_6613605.json:   0%|          | 0.00/714 [00:00<?, ?B/s]
article_6584249.json:   0%|          | 0.00/508 [00:00<?, ?B/s]
article_6639781.json:   0%|          | 0.00/896 [00:00<?, ?B/s]
article_6614457.json:   0%|          | 0.00/1.45k [00:00<?, ?B/s]
article_6613657.json:   0%|          | 0.00/856 [00:00<?, ?B/s]
article_6614209.json:   0%|          | 0.00/1.35k [00:00<?, ?B/s]
article_6640792.json:   0%|          | 0.00/562 [00:00<?, ?B/s]
article_6643036.json:   0%|          | 0.00/619 [00:00<?, ?B/s]
article_6643435.json:   0%|          | 0.00/983 [00:00<?, ?B/s]
article_6643167.json:   0%|          | 0.00/1.30k [00:00<?, ?B/s]
article_6643004.json:   0%|          | 0.00/1.29k [00:00<?, ?B/s]
article_6641048.json:   0%|          | 0.00/987 [00:00<?, ?B/s]
article_6696591.json:   0%|          | 0.00/665 [00:00<?, ?B/s]
article_6653653.json:   0%|          | 0.00/686 [00:00<?, ?B/s]
article_6705023.json:   0%|          | 0.00/4.15k [00:00<?, ?B/s]
article_6640875.json:   0%|          | 0.00/1.16k [00:00<?, ?B/s]
article_6684216.json:   0%|          | 0.00/2.28k [00:00<?, ?B/s]
article_6654303.json:   0%|          | 0.00/2.41k [00:00<?, ?B/s]
article_6654000.json:   0%|          | 0.00/9.21k [00:00<?, ?B/s]
article_6643200.json:   0%|          | 0.00/1.43k [00:00<?, ?B/s]
article_6640864.json:   0%|          | 0.00/990 [00:00<?, ?B/s]
article_6681258.json:   0%|          | 0.00/3.58k [00:00<?, ?B/s]
article_6781152.json:   0%|          | 0.00/866 [00:00<?, ?B/s]
article_6783457.json:   0%|          | 0.00/4.91k [00:00<?, ?B/s]
article_6811186.json:   0%|          | 0.00/4.66k [00:00<?, ?B/s]
article_6824809.json:   0%|          | 0.00/2.44k [00:00<?, ?B/s]
article_6781222.json:   0%|          | 0.00/805 [00:00<?, ?B/s]
article_6843909.json:   0%|          | 0.00/697 [00:00<?, ?B/s]
article_6882433.json:   0%|          | 0.00/2.37k [00:00<?, ?B/s]
article_6781228.json:   0%|          | 0.00/790 [00:00<?, ?B/s]
article_6891781.json:   0%|          | 0.00/1.28k [00:00<?, ?B/s]
article_6837156.json:   0%|          | 0.00/272 [00:00<?, ?B/s]
article_6742369.json:   0%|          | 0.00/997 [00:00<?, ?B/s]
article_6891767.json:   0%|          | 0.00/1.10k [00:00<?, ?B/s]
article_6843914.json:   0%|          | 0.00/287 [00:00<?, ?B/s]
article_6891753.json:   0%|          | 0.00/2.25k [00:00<?, ?B/s]
article_6891827.json:   0%|          | 0.00/917 [00:00<?, ?B/s]
article_6825453.json:   0%|          | 0.00/21.5k [00:00<?, ?B/s]
article_6891829.json:   0%|          | 0.00/1.85k [00:00<?, ?B/s]
article_6891831.json:   0%|          | 0.00/1.42k [00:00<?, ?B/s]
article_6897198.json:   0%|          | 0.00/760 [00:00<?, ?B/s]
article_6897204.json:   0%|          | 0.00/1.41k [00:00<?, ?B/s]
article_6897202.json:   0%|          | 0.00/1.08k [00:00<?, ?B/s]
article_6901266.json:   0%|          | 0.00/450 [00:00<?, ?B/s]
article_6891834.json:   0%|          | 0.00/1.34k [00:00<?, ?B/s]
article_6897191.json:   0%|          | 0.00/1.56k [00:00<?, ?B/s]
article_6950777.json:   0%|          | 0.00/4.08k [00:00<?, ?B/s]
article_6897186.json:   0%|          | 0.00/1.39k [00:00<?, ?B/s]
article_6897199.json:   0%|          | 0.00/804 [00:00<?, ?B/s]
article_6897179.json:   0%|          | 0.00/1.38k [00:00<?, ?B/s]
article_6897194.json:   0%|          | 0.00/1.69k [00:00<?, ?B/s]
article_6891839.json:   0%|          | 0.00/2.75k [00:00<?, ?B/s]
article_6897213.json:   0%|          | 0.00/4.03k [00:00<?, ?B/s]
Generating train split:   0%|          | 0/76 [00:00<?, ? examples/s]
76

Swarm Agents Implementation

[ ]
Starting Swarm CLI 🐝
User: What is the pricing of OpenAI API key?
User Interface Agent: OpenAI API pricing varies based on the specific API product and usage. Here are some general details:

1. **GPT-3.5 and GPT-4 API:**
   - These models are typically priced based on the number of tokens (words or word parts) processed in requests to the API.
   - The pricing might differ between tokens used in input and output.
   - Specific prices can be found on OpenAI's official pricing page or by contacting their sales team.

2. **Fine-Tuning:**
   - The costs for training custom models may involve additional fees, and variable pricing based on the model and data used for fine-tuning.

3. **Other Services:**
   - Other AI models and services provided by OpenAI might have different pricing structures.

Pricing can also depend on the level of access purchased (e.g., pay-as-you-go vs. committed use) and any relevant discounts for high volume usage or non-profit/educational purposes.

For exact, up-to-date pricing, you should consult OpenAI’s official website or directly reach out to their sales team.