diff --git a/docs/encoders/bedrock.ipynb b/docs/encoders/bedrock.ipynb
new file mode 100644
index 0000000000000000000000000000000000000000..54cc0a7dfbb3709ce0e6355e9d0a7508804298ec
--- /dev/null
+++ b/docs/encoders/bedrock.ipynb
@@ -0,0 +1,1323 @@
+{
+ "cells": [
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "[![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/aurelio-labs/semantic-router/blob/main/docs/encoders/bedrock.ipynb) [![Open nbviewer](https://raw.githubusercontent.com/pinecone-io/examples/master/assets/nbviewer-shield.svg)](https://nbviewer.org/github/aurelio-labs/semantic-router/blob/main/docs/encoders/bedrock.ipynb)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# Using Bedrock embedding Models"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "The 3rd generation embedding models from AWS Bedrock (`amazon.titan-embed-text-v1`, `amazon.titan-embed-text-v2` and `cohere.embed-english-v3`) can both be used with our `BedrockEncoder`."
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## Getting Started"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "We start by installing semantic-router. Support for the new `Bedrock` embedding models was added in `semantic-router==0.0.40`."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "!pip install -qU \"semantic-router[bedrock]==0.0.40\""
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "We start by defining a dictionary mapping routes to example phrases that should trigger those routes."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 1,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "from semantic_router import Route\n",
+    "\n",
+    "politics = Route(\n",
+    "    name=\"politics\",\n",
+    "    utterances=[\n",
+    "        \"isn't politics the best thing ever\",\n",
+    "        \"why don't you tell me about your political opinions\",\n",
+    "        \"don't you just love the president\",\n",
+    "        \"don't you just hate the president\",\n",
+    "        \"they're going to destroy this country!\",\n",
+    "        \"they will save the country!\",\n",
+    "    ],\n",
+    ")"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "Let's define another for good measure:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 2,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "chitchat = Route(\n",
+    "    name=\"chitchat\",\n",
+    "    utterances=[\n",
+    "        \"how's the weather today?\",\n",
+    "        \"how are things going?\",\n",
+    "        \"lovely weather today\",\n",
+    "        \"the weather is horrendous\",\n",
+    "        \"let's go to the chippy\",\n",
+    "    ],\n",
+    ")\n",
+    "\n",
+    "routes = [politics, chitchat]"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "Now we initialize our embedding model, we will use the `-3-large` model alongside a `dimensions` value of `256`. This will produce _tiny_ 256-dimensional vectors that — according to OpenAI — outperform the 1536-dimensional vectors produced by `text-embedding-ada-002`."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 3,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "import os\n",
+    "from getpass import getpass\n",
+    "from semantic_router.encoders import BedrockEncoder\n",
+    "\n",
+    "aws_access_key_id = os.getenv(\"AWS_ACCESS_KEY_ID\") or getpass(\n",
+    "    \"Enter AWS Access Key ID: \"\n",
+    ")\n",
+    "aws_secret_access_key = os.getenv(\"AWS_SECRET_ACCESS_KEY\") or getpass(\n",
+    "    \"Enter AWS Secret Access Key: \"\n",
+    ")\n",
+    "aws_session_token = os.getenv(\"AWS_SESSION_TOKEN\") or getpass(\n",
+    "    \"Enter AWS Session Token: \"\n",
+    ")\n",
+    "aws_region = os.getenv(\"AWS_REGION\") or getpass(\"Enter AWS Region: \")\n",
+    "\n",
+    "encoder = BedrockEncoder(\n",
+    "    name=\"amazon.titan-embed-image-v1\",\n",
+    "    score_threshold=0.5,\n",
+    "    access_key_id=aws_access_key_id,\n",
+    "    secret_access_key=aws_secret_access_key,\n",
+    "    session_token=aws_session_token,\n",
+    "    region=aws_region,\n",
+    ")"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 4,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "[[0.012878418,\n",
+       "  0.028442383,\n",
+       "  -0.022094727,\n",
+       "  -0.020751953,\n",
+       "  -0.008300781,\n",
+       "  0.033691406,\n",
+       "  0.09326172,\n",
+       "  0.0045166016,\n",
+       "  0.033935547,\n",
+       "  0.015319824,\n",
+       "  0.012939453,\n",
+       "  0.015380859,\n",
+       "  0.012756348,\n",
+       "  -0.064453125,\n",
+       "  0.018432617,\n",
+       "  0.03173828,\n",
+       "  -0.018188477,\n",
+       "  -0.007171631,\n",
+       "  0.03955078,\n",
+       "  0.0033874512,\n",
+       "  0.007019043,\n",
+       "  0.010131836,\n",
+       "  -0.025878906,\n",
+       "  0.056152344,\n",
+       "  0.01373291,\n",
+       "  -0.020263672,\n",
+       "  0.055419922,\n",
+       "  -0.06225586,\n",
+       "  0.040039062,\n",
+       "  -0.015075684,\n",
+       "  0.012268066,\n",
+       "  -0.056640625,\n",
+       "  0.04736328,\n",
+       "  -0.002609253,\n",
+       "  -0.0064086914,\n",
+       "  0.011291504,\n",
+       "  -0.019165039,\n",
+       "  -0.005493164,\n",
+       "  0.003189087,\n",
+       "  0.008666992,\n",
+       "  0.03564453,\n",
+       "  -0.0027923584,\n",
+       "  -0.016601562,\n",
+       "  0.014404297,\n",
+       "  -0.01171875,\n",
+       "  0.013183594,\n",
+       "  -0.018920898,\n",
+       "  -0.030639648,\n",
+       "  0.010864258,\n",
+       "  0.052734375,\n",
+       "  -0.006164551,\n",
+       "  0.0035705566,\n",
+       "  0.0060424805,\n",
+       "  -0.021606445,\n",
+       "  -0.040527344,\n",
+       "  0.020385742,\n",
+       "  0.004638672,\n",
+       "  -0.010314941,\n",
+       "  -0.010681152,\n",
+       "  -0.010803223,\n",
+       "  -0.038330078,\n",
+       "  -0.029174805,\n",
+       "  0.036865234,\n",
+       "  -0.03112793,\n",
+       "  -0.034179688,\n",
+       "  0.017944336,\n",
+       "  -0.03515625,\n",
+       "  0.068847656,\n",
+       "  -0.032470703,\n",
+       "  -0.03540039,\n",
+       "  0.017944336,\n",
+       "  -0.024047852,\n",
+       "  -0.05834961,\n",
+       "  -0.049804688,\n",
+       "  -0.009277344,\n",
+       "  0.021484375,\n",
+       "  -0.036376953,\n",
+       "  0.03540039,\n",
+       "  -0.012939453,\n",
+       "  -0.03491211,\n",
+       "  -0.028808594,\n",
+       "  0.017333984,\n",
+       "  0.021484375,\n",
+       "  0.0052490234,\n",
+       "  -0.026611328,\n",
+       "  -0.0026245117,\n",
+       "  0.05078125,\n",
+       "  -0.022949219,\n",
+       "  -0.057128906,\n",
+       "  -0.019042969,\n",
+       "  0.01574707,\n",
+       "  -0.0025482178,\n",
+       "  0.02355957,\n",
+       "  -0.0011367798,\n",
+       "  0.0039367676,\n",
+       "  -0.015197754,\n",
+       "  -0.02758789,\n",
+       "  -0.025268555,\n",
+       "  -0.048339844,\n",
+       "  0.04296875,\n",
+       "  -0.01373291,\n",
+       "  -0.0052490234,\n",
+       "  -0.016357422,\n",
+       "  -0.029663086,\n",
+       "  0.024536133,\n",
+       "  -0.03881836,\n",
+       "  -0.035888672,\n",
+       "  0.013793945,\n",
+       "  -0.016357422,\n",
+       "  -0.052734375,\n",
+       "  0.0154418945,\n",
+       "  -0.004058838,\n",
+       "  -0.018432617,\n",
+       "  -0.01574707,\n",
+       "  0.06225586,\n",
+       "  0.044433594,\n",
+       "  -0.011474609,\n",
+       "  0.019897461,\n",
+       "  -0.018432617,\n",
+       "  -0.03515625,\n",
+       "  0.057861328,\n",
+       "  -0.016967773,\n",
+       "  0.008666992,\n",
+       "  0.01574707,\n",
+       "  0.024780273,\n",
+       "  0.01953125,\n",
+       "  -0.005554199,\n",
+       "  0.042236328,\n",
+       "  -0.026123047,\n",
+       "  -0.111328125,\n",
+       "  0.018798828,\n",
+       "  0.018066406,\n",
+       "  -0.032958984,\n",
+       "  -0.0025024414,\n",
+       "  -0.01159668,\n",
+       "  -0.028930664,\n",
+       "  -0.055908203,\n",
+       "  0.037353516,\n",
+       "  0.018432617,\n",
+       "  0.015258789,\n",
+       "  -0.021850586,\n",
+       "  -0.0026245117,\n",
+       "  0.016723633,\n",
+       "  0.0095825195,\n",
+       "  0.05029297,\n",
+       "  0.011779785,\n",
+       "  0.04711914,\n",
+       "  -0.064941406,\n",
+       "  0.0059509277,\n",
+       "  -0.025390625,\n",
+       "  0.03857422,\n",
+       "  0.046875,\n",
+       "  0.015258789,\n",
+       "  0.03930664,\n",
+       "  0.02355957,\n",
+       "  0.03125,\n",
+       "  -0.032958984,\n",
+       "  0.056640625,\n",
+       "  -0.056396484,\n",
+       "  0.0146484375,\n",
+       "  0.0025634766,\n",
+       "  0.006591797,\n",
+       "  0.0015563965,\n",
+       "  -0.020385742,\n",
+       "  0.016723633,\n",
+       "  -0.008972168,\n",
+       "  -0.024169922,\n",
+       "  0.03125,\n",
+       "  -0.028808594,\n",
+       "  0.040283203,\n",
+       "  0.0055236816,\n",
+       "  -0.0025787354,\n",
+       "  0.067871094,\n",
+       "  -0.004119873,\n",
+       "  -0.03515625,\n",
+       "  0.030517578,\n",
+       "  0.0077819824,\n",
+       "  -0.026733398,\n",
+       "  -0.01953125,\n",
+       "  -0.014709473,\n",
+       "  -0.045898438,\n",
+       "  -0.012268066,\n",
+       "  0.022216797,\n",
+       "  0.008972168,\n",
+       "  0.017211914,\n",
+       "  -0.0234375,\n",
+       "  -0.017211914,\n",
+       "  0.030151367,\n",
+       "  -0.0034942627,\n",
+       "  0.029174805,\n",
+       "  0.05029297,\n",
+       "  -0.053222656,\n",
+       "  -0.037841797,\n",
+       "  0.008117676,\n",
+       "  0.014038086,\n",
+       "  0.015563965,\n",
+       "  -0.060791016,\n",
+       "  0.014221191,\n",
+       "  -0.028808594,\n",
+       "  -0.03955078,\n",
+       "  -0.111328125,\n",
+       "  0.041992188,\n",
+       "  -0.043945312,\n",
+       "  0.030273438,\n",
+       "  -0.045898438,\n",
+       "  -0.014770508,\n",
+       "  -0.030395508,\n",
+       "  -0.041748047,\n",
+       "  0.0011291504,\n",
+       "  -0.034423828,\n",
+       "  -0.04272461,\n",
+       "  0.008300781,\n",
+       "  0.014831543,\n",
+       "  -0.018798828,\n",
+       "  -0.017700195,\n",
+       "  -0.014099121,\n",
+       "  -0.011169434,\n",
+       "  -0.029418945,\n",
+       "  0.027832031,\n",
+       "  0.010986328,\n",
+       "  0.030151367,\n",
+       "  -0.021728516,\n",
+       "  0.004547119,\n",
+       "  -0.034423828,\n",
+       "  -0.01977539,\n",
+       "  0.047851562,\n",
+       "  0.021362305,\n",
+       "  0.044433594,\n",
+       "  0.06933594,\n",
+       "  -0.0046691895,\n",
+       "  -0.049560547,\n",
+       "  -0.091308594,\n",
+       "  0.084472656,\n",
+       "  0.015991211,\n",
+       "  0.030883789,\n",
+       "  0.03112793,\n",
+       "  0.041503906,\n",
+       "  0.018920898,\n",
+       "  0.04663086,\n",
+       "  0.0064697266,\n",
+       "  0.0058288574,\n",
+       "  -0.007873535,\n",
+       "  0.016113281,\n",
+       "  -0.0058898926,\n",
+       "  0.040039062,\n",
+       "  0.041748047,\n",
+       "  0.04736328,\n",
+       "  -0.06591797,\n",
+       "  0.07861328,\n",
+       "  -0.021850586,\n",
+       "  -0.013427734,\n",
+       "  0.033447266,\n",
+       "  0.013183594,\n",
+       "  0.025878906,\n",
+       "  0.036376953,\n",
+       "  -0.017211914,\n",
+       "  0.0067443848,\n",
+       "  -0.011291504,\n",
+       "  -0.009155273,\n",
+       "  0.005554199,\n",
+       "  -0.00039863586,\n",
+       "  0.08251953,\n",
+       "  -0.03491211,\n",
+       "  -0.025878906,\n",
+       "  -0.037109375,\n",
+       "  0.052734375,\n",
+       "  -0.008911133,\n",
+       "  -0.0390625,\n",
+       "  0.021362305,\n",
+       "  -0.022949219,\n",
+       "  0.029907227,\n",
+       "  0.041259766,\n",
+       "  0.017211914,\n",
+       "  -0.016845703,\n",
+       "  0.043701172,\n",
+       "  -0.025512695,\n",
+       "  -0.020019531,\n",
+       "  0.01953125,\n",
+       "  -0.008422852,\n",
+       "  0.016357422,\n",
+       "  -0.044921875,\n",
+       "  -0.030761719,\n",
+       "  0.029541016,\n",
+       "  -0.008422852,\n",
+       "  0.01977539,\n",
+       "  0.006652832,\n",
+       "  0.0031433105,\n",
+       "  0.044189453,\n",
+       "  0.00793457,\n",
+       "  0.02722168,\n",
+       "  -0.043701172,\n",
+       "  -0.01550293,\n",
+       "  -0.0068359375,\n",
+       "  -0.033935547,\n",
+       "  0.025024414,\n",
+       "  -0.038085938,\n",
+       "  -0.037353516,\n",
+       "  -0.032714844,\n",
+       "  0.037841797,\n",
+       "  -0.057373047,\n",
+       "  -0.017211914,\n",
+       "  -0.012878418,\n",
+       "  -0.0069274902,\n",
+       "  -0.020874023,\n",
+       "  -0.037841797,\n",
+       "  -0.036132812,\n",
+       "  0.033691406,\n",
+       "  -0.030273438,\n",
+       "  0.033691406,\n",
+       "  0.049316406,\n",
+       "  -0.02746582,\n",
+       "  -0.030761719,\n",
+       "  0.03564453,\n",
+       "  -0.02746582,\n",
+       "  -0.03112793,\n",
+       "  -0.00340271,\n",
+       "  0.016845703,\n",
+       "  0.03515625,\n",
+       "  0.009033203,\n",
+       "  0.026489258,\n",
+       "  0.04663086,\n",
+       "  0.0067443848,\n",
+       "  0.017944336,\n",
+       "  0.008850098,\n",
+       "  -0.008544922,\n",
+       "  0.0022277832,\n",
+       "  -0.030029297,\n",
+       "  0.010192871,\n",
+       "  -0.021240234,\n",
+       "  -0.020385742,\n",
+       "  0.008666992,\n",
+       "  0.005706787,\n",
+       "  -0.02758789,\n",
+       "  0.05419922,\n",
+       "  0.036132812,\n",
+       "  0.032714844,\n",
+       "  -0.014526367,\n",
+       "  -0.02758789,\n",
+       "  0.03466797,\n",
+       "  0.05883789,\n",
+       "  0.026977539,\n",
+       "  0.05102539,\n",
+       "  0.052246094,\n",
+       "  0.0056152344,\n",
+       "  0.009094238,\n",
+       "  -0.000579834,\n",
+       "  -0.03100586,\n",
+       "  -0.017822266,\n",
+       "  0.040283203,\n",
+       "  -0.011474609,\n",
+       "  -0.063964844,\n",
+       "  0.026977539,\n",
+       "  0.006958008,\n",
+       "  -0.009765625,\n",
+       "  0.010253906,\n",
+       "  -0.007385254,\n",
+       "  0.0051574707,\n",
+       "  -0.0030670166,\n",
+       "  -0.011047363,\n",
+       "  -0.017333984,\n",
+       "  -0.015991211,\n",
+       "  0.026245117,\n",
+       "  -0.030639648,\n",
+       "  -0.022460938,\n",
+       "  0.0059814453,\n",
+       "  -0.021240234,\n",
+       "  -0.011962891,\n",
+       "  0.010925293,\n",
+       "  -0.021484375,\n",
+       "  0.037353516,\n",
+       "  -0.050048828,\n",
+       "  -0.08544922,\n",
+       "  -0.024658203,\n",
+       "  -0.026611328,\n",
+       "  0.020385742,\n",
+       "  -0.033935547,\n",
+       "  0.025390625,\n",
+       "  0.0030670166,\n",
+       "  -0.008117676,\n",
+       "  -0.022338867,\n",
+       "  0.024291992,\n",
+       "  0.052246094,\n",
+       "  -0.059570312,\n",
+       "  -0.0138549805,\n",
+       "  -0.01940918,\n",
+       "  0.05517578,\n",
+       "  -0.0006866455,\n",
+       "  0.0049743652,\n",
+       "  0.07519531,\n",
+       "  0.057617188,\n",
+       "  0.004425049,\n",
+       "  -0.043945312,\n",
+       "  -0.029663086,\n",
+       "  0.017578125,\n",
+       "  0.030029297,\n",
+       "  -0.007446289,\n",
+       "  -0.030761719,\n",
+       "  -0.021484375,\n",
+       "  -0.009765625,\n",
+       "  0.013671875,\n",
+       "  0.012207031,\n",
+       "  -0.012878418,\n",
+       "  -0.043945312,\n",
+       "  -0.020141602,\n",
+       "  0.013183594,\n",
+       "  0.0074157715,\n",
+       "  -0.028686523,\n",
+       "  0.025268555,\n",
+       "  0.026367188,\n",
+       "  0.030395508,\n",
+       "  0.041748047,\n",
+       "  0.017944336,\n",
+       "  0.036376953,\n",
+       "  0.010437012,\n",
+       "  -0.0625,\n",
+       "  0.04296875,\n",
+       "  0.0057373047,\n",
+       "  0.059570312,\n",
+       "  0.072753906,\n",
+       "  0.03881836,\n",
+       "  -0.0021972656,\n",
+       "  -0.027832031,\n",
+       "  0.0074157715,\n",
+       "  0.00045394897,\n",
+       "  -0.003753662,\n",
+       "  -0.010070801,\n",
+       "  0.008972168,\n",
+       "  -0.0051574707,\n",
+       "  0.007537842,\n",
+       "  -0.0079956055,\n",
+       "  -0.03173828,\n",
+       "  -0.012451172,\n",
+       "  -0.015563965,\n",
+       "  0.027709961,\n",
+       "  -0.039794922,\n",
+       "  -0.016113281,\n",
+       "  -0.056396484,\n",
+       "  0.016601562,\n",
+       "  -0.030395508,\n",
+       "  -0.033447266,\n",
+       "  0.052001953,\n",
+       "  0.001159668,\n",
+       "  -0.02368164,\n",
+       "  -0.046142578,\n",
+       "  0.01977539,\n",
+       "  -0.02746582,\n",
+       "  -0.038330078,\n",
+       "  -0.052734375,\n",
+       "  -0.030151367,\n",
+       "  -0.030639648,\n",
+       "  -0.0043945312,\n",
+       "  0.025390625,\n",
+       "  0.0048828125,\n",
+       "  0.029663086,\n",
+       "  0.01928711,\n",
+       "  -0.025634766,\n",
+       "  -0.022583008,\n",
+       "  -0.019165039,\n",
+       "  0.026733398,\n",
+       "  -0.035888672,\n",
+       "  -0.015014648,\n",
+       "  -0.0069274902,\n",
+       "  -0.005126953,\n",
+       "  0.032958984,\n",
+       "  0.033203125,\n",
+       "  -0.019897461,\n",
+       "  -0.038330078,\n",
+       "  0.020874023,\n",
+       "  0.027954102,\n",
+       "  -0.06689453,\n",
+       "  -0.0069274902,\n",
+       "  -0.0036315918,\n",
+       "  -0.025634766,\n",
+       "  -0.020507812,\n",
+       "  0.017333984,\n",
+       "  -0.019165039,\n",
+       "  0.04663086,\n",
+       "  -0.052734375,\n",
+       "  -0.017333984,\n",
+       "  0.009338379,\n",
+       "  -0.012756348,\n",
+       "  -0.007507324,\n",
+       "  0.045166016,\n",
+       "  0.02722168,\n",
+       "  -0.023071289,\n",
+       "  -0.019042969,\n",
+       "  0.0045166016,\n",
+       "  0.017822266,\n",
+       "  -0.024291992,\n",
+       "  0.030883789,\n",
+       "  -0.008361816,\n",
+       "  -0.050048828,\n",
+       "  -0.026000977,\n",
+       "  0.021850586,\n",
+       "  0.011413574,\n",
+       "  0.0134887695,\n",
+       "  0.013000488,\n",
+       "  -0.0068359375,\n",
+       "  -0.040039062,\n",
+       "  0.007446289,\n",
+       "  0.020751953,\n",
+       "  0.037841797,\n",
+       "  -0.03173828,\n",
+       "  -0.044921875,\n",
+       "  -0.012451172,\n",
+       "  0.00032806396,\n",
+       "  -0.026123047,\n",
+       "  -0.059570312,\n",
+       "  -0.028564453,\n",
+       "  0.04272461,\n",
+       "  0.0064086914,\n",
+       "  0.030639648,\n",
+       "  0.018188477,\n",
+       "  0.016113281,\n",
+       "  0.043945312,\n",
+       "  0.015991211,\n",
+       "  0.020019531,\n",
+       "  0.055419922,\n",
+       "  -0.016357422,\n",
+       "  -0.002166748,\n",
+       "  -0.025756836,\n",
+       "  0.015625,\n",
+       "  -0.020263672,\n",
+       "  0.012573242,\n",
+       "  0.029296875,\n",
+       "  -0.06689453,\n",
+       "  0.0062561035,\n",
+       "  0.03857422,\n",
+       "  -0.010803223,\n",
+       "  -0.026245117,\n",
+       "  -0.016235352,\n",
+       "  -0.04248047,\n",
+       "  0.033691406,\n",
+       "  0.02746582,\n",
+       "  0.024902344,\n",
+       "  -0.025878906,\n",
+       "  0.046142578,\n",
+       "  -0.029541016,\n",
+       "  -0.015075684,\n",
+       "  0.015991211,\n",
+       "  -0.030883789,\n",
+       "  0.017700195,\n",
+       "  0.03173828,\n",
+       "  -0.005126953,\n",
+       "  -0.0034484863,\n",
+       "  -0.041992188,\n",
+       "  -0.01159668,\n",
+       "  -0.007293701,\n",
+       "  0.04321289,\n",
+       "  0.009399414,\n",
+       "  -0.017578125,\n",
+       "  -0.029418945,\n",
+       "  0.06542969,\n",
+       "  -0.03125,\n",
+       "  0.020019531,\n",
+       "  -0.05029297,\n",
+       "  0.033447266,\n",
+       "  -0.0154418945,\n",
+       "  0.041748047,\n",
+       "  0.04345703,\n",
+       "  0.03515625,\n",
+       "  -0.003479004,\n",
+       "  0.021484375,\n",
+       "  -0.025146484,\n",
+       "  4.196167e-05,\n",
+       "  0.007659912,\n",
+       "  -0.03540039,\n",
+       "  -0.012512207,\n",
+       "  0.0087890625,\n",
+       "  0.041259766,\n",
+       "  0.015319824,\n",
+       "  -0.018066406,\n",
+       "  -0.0018920898,\n",
+       "  0.033447266,\n",
+       "  -0.01184082,\n",
+       "  -0.04345703,\n",
+       "  -0.024780273,\n",
+       "  0.064453125,\n",
+       "  -0.012207031,\n",
+       "  -0.036132812,\n",
+       "  0.10839844,\n",
+       "  -0.016357422,\n",
+       "  -0.0047302246,\n",
+       "  -0.013793945,\n",
+       "  0.018066406,\n",
+       "  -0.017700195,\n",
+       "  0.01953125,\n",
+       "  -0.0027313232,\n",
+       "  -0.04272461,\n",
+       "  0.01940918,\n",
+       "  -0.01586914,\n",
+       "  0.024414062,\n",
+       "  -0.044433594,\n",
+       "  -0.026123047,\n",
+       "  0.022094727,\n",
+       "  -0.046142578,\n",
+       "  0.030761719,\n",
+       "  0.017578125,\n",
+       "  -0.0028076172,\n",
+       "  0.059326172,\n",
+       "  0.025512695,\n",
+       "  0.025146484,\n",
+       "  -0.03125,\n",
+       "  0.002319336,\n",
+       "  -0.022827148,\n",
+       "  0.053710938,\n",
+       "  -0.010559082,\n",
+       "  0.04345703,\n",
+       "  0.005645752,\n",
+       "  -0.021972656,\n",
+       "  -0.018920898,\n",
+       "  -0.040283203,\n",
+       "  0.017456055,\n",
+       "  0.056884766,\n",
+       "  0.01928711,\n",
+       "  -0.022827148,\n",
+       "  0.012145996,\n",
+       "  -0.047851562,\n",
+       "  0.021118164,\n",
+       "  -0.028930664,\n",
+       "  -0.029907227,\n",
+       "  -0.030883789,\n",
+       "  -0.022827148,\n",
+       "  -0.013977051,\n",
+       "  0.043701172,\n",
+       "  0.007080078,\n",
+       "  0.04711914,\n",
+       "  -0.010253906,\n",
+       "  -0.041015625,\n",
+       "  0.009216309,\n",
+       "  -0.010986328,\n",
+       "  0.04248047,\n",
+       "  -0.02758789,\n",
+       "  0.025268555,\n",
+       "  0.03466797,\n",
+       "  0.045166016,\n",
+       "  -0.00023365021,\n",
+       "  -0.021240234,\n",
+       "  -0.016845703,\n",
+       "  0.02355957,\n",
+       "  0.024536133,\n",
+       "  0.036376953,\n",
+       "  -0.015014648,\n",
+       "  9.393692e-05,\n",
+       "  -0.0115356445,\n",
+       "  0.033447266,\n",
+       "  -0.012145996,\n",
+       "  0.007080078,\n",
+       "  0.017700195,\n",
+       "  -0.014282227,\n",
+       "  0.027709961,\n",
+       "  0.037353516,\n",
+       "  -0.041503906,\n",
+       "  0.03149414,\n",
+       "  0.041015625,\n",
+       "  0.008483887,\n",
+       "  0.00579834,\n",
+       "  0.034179688,\n",
+       "  0.025634766,\n",
+       "  -0.038085938,\n",
+       "  -0.06591797,\n",
+       "  -0.036376953,\n",
+       "  0.01171875,\n",
+       "  -0.026000977,\n",
+       "  0.057861328,\n",
+       "  -0.008300781,\n",
+       "  0.014282227,\n",
+       "  -0.029052734,\n",
+       "  0.044433594,\n",
+       "  -0.026123047,\n",
+       "  0.016601562,\n",
+       "  -0.016357422,\n",
+       "  0.0024261475,\n",
+       "  -0.025268555,\n",
+       "  0.05493164,\n",
+       "  -0.025756836,\n",
+       "  0.02746582,\n",
+       "  0.037353516,\n",
+       "  0.02734375,\n",
+       "  -0.04736328,\n",
+       "  -0.012756348,\n",
+       "  0.016601562,\n",
+       "  0.009765625,\n",
+       "  0.013366699,\n",
+       "  0.013305664,\n",
+       "  0.036621094,\n",
+       "  -0.034423828,\n",
+       "  0.046875,\n",
+       "  -0.0028533936,\n",
+       "  0.018310547,\n",
+       "  0.05517578,\n",
+       "  -0.06591797,\n",
+       "  0.042236328,\n",
+       "  -0.013305664,\n",
+       "  -0.007446289,\n",
+       "  0.014343262,\n",
+       "  -0.04296875,\n",
+       "  -0.038330078,\n",
+       "  -0.016235352,\n",
+       "  -0.043701172,\n",
+       "  0.004180908,\n",
+       "  -0.045410156,\n",
+       "  -0.009643555,\n",
+       "  -0.012939453,\n",
+       "  -0.0020141602,\n",
+       "  -0.006713867,\n",
+       "  -0.03881836,\n",
+       "  -0.010559082,\n",
+       "  0.036376953,\n",
+       "  0.024169922,\n",
+       "  -0.01977539,\n",
+       "  0.025756836,\n",
+       "  -0.010253906,\n",
+       "  0.05493164,\n",
+       "  0.01965332,\n",
+       "  0.012451172,\n",
+       "  0.053466797,\n",
+       "  -0.0062561035,\n",
+       "  0.028076172,\n",
+       "  0.024902344,\n",
+       "  0.068847656,\n",
+       "  0.019897461,\n",
+       "  0.01361084,\n",
+       "  0.015991211,\n",
+       "  0.017089844,\n",
+       "  -0.053710938,\n",
+       "  -0.056152344,\n",
+       "  0.04296875,\n",
+       "  -0.0021972656,\n",
+       "  -0.05517578,\n",
+       "  0.022460938,\n",
+       "  -0.041259766,\n",
+       "  -0.0234375,\n",
+       "  -0.048583984,\n",
+       "  -0.029296875,\n",
+       "  0.034423828,\n",
+       "  0.008056641,\n",
+       "  0.011352539,\n",
+       "  0.0390625,\n",
+       "  0.013366699,\n",
+       "  -0.023803711,\n",
+       "  -0.03466797,\n",
+       "  0.043701172,\n",
+       "  0.02746582,\n",
+       "  0.051757812,\n",
+       "  -0.07128906,\n",
+       "  0.0059509277,\n",
+       "  0.022827148,\n",
+       "  0.013977051,\n",
+       "  -0.046142578,\n",
+       "  -0.016235352,\n",
+       "  0.017089844,\n",
+       "  -0.001045227,\n",
+       "  -0.014953613,\n",
+       "  0.012084961,\n",
+       "  -0.0035705566,\n",
+       "  0.016845703,\n",
+       "  0.0234375,\n",
+       "  0.026611328,\n",
+       "  -0.033203125,\n",
+       "  0.076660156,\n",
+       "  0.007873535,\n",
+       "  0.03540039,\n",
+       "  0.0061950684,\n",
+       "  -0.028564453,\n",
+       "  -0.03491211,\n",
+       "  0.01586914,\n",
+       "  -0.015991211,\n",
+       "  -0.024780273,\n",
+       "  -0.028686523,\n",
+       "  0.028076172,\n",
+       "  -0.005645752,\n",
+       "  -0.043945312,\n",
+       "  0.021118164,\n",
+       "  -0.0027008057,\n",
+       "  0.01550293,\n",
+       "  0.031982422,\n",
+       "  -0.024780273,\n",
+       "  0.025878906,\n",
+       "  0.05859375,\n",
+       "  -0.0050354004,\n",
+       "  0.033691406,\n",
+       "  0.044677734,\n",
+       "  0.018432617,\n",
+       "  -0.007171631,\n",
+       "  0.003829956,\n",
+       "  -0.047851562,\n",
+       "  0.026855469,\n",
+       "  -0.005065918,\n",
+       "  -0.02722168,\n",
+       "  -0.03173828,\n",
+       "  -0.0703125,\n",
+       "  -0.016967773,\n",
+       "  -0.008605957,\n",
+       "  0.037353516,\n",
+       "  0.03149414,\n",
+       "  -0.06347656,\n",
+       "  0.031982422,\n",
+       "  -0.033691406,\n",
+       "  -0.03540039,\n",
+       "  0.021728516,\n",
+       "  0.07080078,\n",
+       "  -0.03491211,\n",
+       "  -0.014221191,\n",
+       "  0.046142578,\n",
+       "  -0.010803223,\n",
+       "  0.009094238,\n",
+       "  -0.0048217773,\n",
+       "  -5.7935715e-05,\n",
+       "  0.055664062,\n",
+       "  0.025512695,\n",
+       "  -0.024291992,\n",
+       "  0.04663086,\n",
+       "  -0.008300781,\n",
+       "  0.056640625,\n",
+       "  -0.006713867,\n",
+       "  -0.018188477,\n",
+       "  0.012268066,\n",
+       "  -0.045898438,\n",
+       "  -0.051513672,\n",
+       "  0.016357422,\n",
+       "  -0.049316406,\n",
+       "  -0.0020599365,\n",
+       "  -0.04345703,\n",
+       "  -0.08935547,\n",
+       "  -0.056640625,\n",
+       "  -0.048828125,\n",
+       "  -0.020996094,\n",
+       "  0.036376953,\n",
+       "  -0.052001953,\n",
+       "  0.020629883,\n",
+       "  0.048339844,\n",
+       "  0.029296875,\n",
+       "  0.021728516,\n",
+       "  0.028930664,\n",
+       "  -0.024169922,\n",
+       "  -0.030273438,\n",
+       "  -0.036621094,\n",
+       "  -0.028808594,\n",
+       "  -0.0546875,\n",
+       "  6.3478947e-06,\n",
+       "  0.03857422,\n",
+       "  0.01965332,\n",
+       "  -0.016235352,\n",
+       "  -0.017089844,\n",
+       "  -0.012451172,\n",
+       "  0.010498047,\n",
+       "  0.025024414,\n",
+       "  0.016601562,\n",
+       "  0.032958984,\n",
+       "  0.0047912598,\n",
+       "  -0.011047363,\n",
+       "  0.011352539,\n",
+       "  -0.0044555664,\n",
+       "  0.004211426,\n",
+       "  -0.004119873,\n",
+       "  0.0045776367,\n",
+       "  0.03149414,\n",
+       "  -0.025146484,\n",
+       "  -0.010070801,\n",
+       "  -0.02331543,\n",
+       "  0.032714844,\n",
+       "  0.018798828,\n",
+       "  -0.020751953,\n",
+       "  0.06201172,\n",
+       "  0.0043029785,\n",
+       "  -0.039794922,\n",
+       "  0.010131836,\n",
+       "  0.048828125,\n",
+       "  -0.036621094,\n",
+       "  -0.007873535,\n",
+       "  -0.029296875,\n",
+       "  -0.046142578,\n",
+       "  -0.016845703,\n",
+       "  0.056640625,\n",
+       "  -0.048095703,\n",
+       "  0.0051574707,\n",
+       "  0.0008087158,\n",
+       "  0.00018310547,\n",
+       "  -0.019165039,\n",
+       "  0.017700195,\n",
+       "  -0.032226562,\n",
+       "  -0.0047912598,\n",
+       "  -0.053710938,\n",
+       "  -0.06542969,\n",
+       "  0.013427734,\n",
+       "  0.004119873,\n",
+       "  0.021362305,\n",
+       "  -0.0038452148,\n",
+       "  -0.008056641,\n",
+       "  -0.021606445,\n",
+       "  0.00793457,\n",
+       "  -0.018798828,\n",
+       "  -0.048828125,\n",
+       "  0.006958008,\n",
+       "  -0.0390625,\n",
+       "  -0.044921875,\n",
+       "  -0.029052734,\n",
+       "  -0.0039367676,\n",
+       "  -0.009460449,\n",
+       "  0.03149414,\n",
+       "  -0.024658203,\n",
+       "  -0.007171631,\n",
+       "  -0.020751953,\n",
+       "  0.010620117,\n",
+       "  0.027709961,\n",
+       "  -0.012878418,\n",
+       "  -0.006134033,\n",
+       "  -0.036376953,\n",
+       "  0.0234375,\n",
+       "  -0.008056641,\n",
+       "  -0.029296875,\n",
+       "  0.0048217773,\n",
+       "  0.053222656,\n",
+       "  -0.03857422,\n",
+       "  -0.03930664,\n",
+       "  -0.041015625,\n",
+       "  0.012084961,\n",
+       "  -0.025146484,\n",
+       "  0.03491211,\n",
+       "  -0.041748047,\n",
+       "  0.04248047,\n",
+       "  -0.0003452301,\n",
+       "  -0.018920898,\n",
+       "  -0.046142578,\n",
+       "  -0.014160156,\n",
+       "  0.046875,\n",
+       "  -0.022216797,\n",
+       "  0.052246094,\n",
+       "  -0.026611328,\n",
+       "  0.029541016,\n",
+       "  -0.016357422,\n",
+       "  0.04272461,\n",
+       "  -0.018920898,\n",
+       "  0.0078125,\n",
+       "  -0.018676758,\n",
+       "  0.014770508,\n",
+       "  -0.016357422,\n",
+       "  -0.040527344,\n",
+       "  -0.004486084,\n",
+       "  -0.018066406,\n",
+       "  -0.03100586,\n",
+       "  0.033691406,\n",
+       "  -0.016113281,\n",
+       "  -0.051757812,\n",
+       "  0.028320312,\n",
+       "  -0.0234375,\n",
+       "  0.005126953,\n",
+       "  -0.01171875,\n",
+       "  0.022216797,\n",
+       "  -0.03466797,\n",
+       "  0.044433594,\n",
+       "  -0.012268066,\n",
+       "  0.020263672,\n",
+       "  0.016479492,\n",
+       "  0.050048828,\n",
+       "  -0.059570312,\n",
+       "  0.016967773,\n",
+       "  -0.010925293,\n",
+       "  0.0013809204,\n",
+       "  0.026977539,\n",
+       "  -0.022460938,\n",
+       "  0.034179688,\n",
+       "  0.01953125,\n",
+       "  0.005706787,\n",
+       "  0.036376953,\n",
+       "  -0.018188477,\n",
+       "  0.041503906,\n",
+       "  0.08251953,\n",
+       "  0.009521484,\n",
+       "  0.005493164,\n",
+       "  0.0021820068,\n",
+       "  -0.014465332,\n",
+       "  0.01965332,\n",
+       "  0.0008735657,\n",
+       "  0.029418945,\n",
+       "  -0.057617188,\n",
+       "  0.021972656,\n",
+       "  0.008483887,\n",
+       "  0.064941406,\n",
+       "  0.0013198853,\n",
+       "  -0.032714844,\n",
+       "  -0.0087890625,\n",
+       "  -0.014160156,\n",
+       "  0.080566406,\n",
+       "  -0.012390137,\n",
+       "  0.02746582,\n",
+       "  0.0044555664,\n",
+       "  -0.029541016,\n",
+       "  0.011657715,\n",
+       "  -0.010803223,\n",
+       "  -0.020874023,\n",
+       "  0.0030670166,\n",
+       "  0.013549805,\n",
+       "  0.0025787354,\n",
+       "  -0.022827148,\n",
+       "  -0.011291504,\n",
+       "  0.018188477,\n",
+       "  0.036132812,\n",
+       "  0.008178711,\n",
+       "  ...]]"
+      ]
+     },
+     "execution_count": 4,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "encoder([\"hey\"])"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "Now we define the `RouteLayer`. When called, the route layer will consume text (a query) and output the category (`Route`) it belongs to — to initialize a `RouteLayer` we need our `encoder` model and a list of `routes`."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 5,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stderr",
+     "output_type": "stream",
+     "text": [
+      "\u001b[32m2024-05-13 22:26:54 INFO semantic_router.utils.logger local\u001b[0m\n"
+     ]
+    }
+   ],
+   "source": [
+    "from semantic_router.layer import RouteLayer\n",
+    "\n",
+    "rl = RouteLayer(encoder=encoder, routes=routes)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "We can check the dimensionality of our vectors by looking at the `index` attribute of the `RouteLayer`."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 18,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "(11, 1024)"
+      ]
+     },
+     "execution_count": 18,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "rl.index.index.shape"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "We do have 256-dimensional vectors. Now let's test them:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 19,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "RouteChoice(name='politics', function_call=None, similarity_score=None)"
+      ]
+     },
+     "execution_count": 19,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "rl(\"don't you love politics?\")"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 20,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "RouteChoice(name='chitchat', function_call=None, similarity_score=None)"
+      ]
+     },
+     "execution_count": 20,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "rl(\"how's the weather today?\")"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "Both are classified accurately, what if we send a query that is unrelated to our existing `Route` objects?"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 22,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "RouteChoice(name=None, function_call=None, similarity_score=None)"
+      ]
+     },
+     "execution_count": 22,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "rl(\"How does llama model work?\")"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "In this case, we return `None` because no matches were identified. We always recommend optimizing your `RouteLayer` for optimal performance, you can see how in [this notebook](https://github.com/aurelio-labs/semantic-router/blob/main/docs/06-threshold-optimization.ipynb)."
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "---"
+   ]
+  }
+ ],
+ "metadata": {
+  "kernelspec": {
+   "display_name": "decision-layer",
+   "language": "python",
+   "name": "python3"
+  },
+  "language_info": {
+   "codemirror_mode": {
+    "name": "ipython",
+    "version": 3
+   },
+   "file_extension": ".py",
+   "mimetype": "text/x-python",
+   "name": "python",
+   "nbconvert_exporter": "python",
+   "pygments_lexer": "ipython3",
+   "version": "3.12.1"
+  }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
diff --git a/poetry.lock b/poetry.lock
index 53b7b5cd7df3ef496e4c97d39e3beea6cd662bc8..33839cf8dd3449ed66a81666f4658dfe1d03ab38 100644
--- a/poetry.lock
+++ b/poetry.lock
@@ -1,114 +1,4 @@
-# This file is automatically @generated by Poetry 1.8.2 and should not be changed by hand.
-
-[[package]]
-name = "aiohttp"
-version = "3.9.4"
-description = "Async http client/server framework (asyncio)"
-optional = false
-python-versions = ">=3.8"
-files = [
-    {file = "aiohttp-3.9.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:76d32588ef7e4a3f3adff1956a0ba96faabbdee58f2407c122dd45aa6e34f372"},
-    {file = "aiohttp-3.9.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:56181093c10dbc6ceb8a29dfeea1e815e1dfdc020169203d87fd8d37616f73f9"},
-    {file = "aiohttp-3.9.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c7a5b676d3c65e88b3aca41816bf72831898fcd73f0cbb2680e9d88e819d1e4d"},
-    {file = "aiohttp-3.9.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d1df528a85fb404899d4207a8d9934cfd6be626e30e5d3a5544a83dbae6d8a7e"},
-    {file = "aiohttp-3.9.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f595db1bceabd71c82e92df212dd9525a8a2c6947d39e3c994c4f27d2fe15b11"},
-    {file = "aiohttp-3.9.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9c0b09d76e5a4caac3d27752027fbd43dc987b95f3748fad2b924a03fe8632ad"},
-    {file = "aiohttp-3.9.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:689eb4356649ec9535b3686200b231876fb4cab4aca54e3bece71d37f50c1d13"},
-    {file = "aiohttp-3.9.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a3666cf4182efdb44d73602379a66f5fdfd5da0db5e4520f0ac0dcca644a3497"},
-    {file = "aiohttp-3.9.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:b65b0f8747b013570eea2f75726046fa54fa8e0c5db60f3b98dd5d161052004a"},
-    {file = "aiohttp-3.9.4-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:a1885d2470955f70dfdd33a02e1749613c5a9c5ab855f6db38e0b9389453dce7"},
-    {file = "aiohttp-3.9.4-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:0593822dcdb9483d41f12041ff7c90d4d1033ec0e880bcfaf102919b715f47f1"},
-    {file = "aiohttp-3.9.4-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:47f6eb74e1ecb5e19a78f4a4228aa24df7fbab3b62d4a625d3f41194a08bd54f"},
-    {file = "aiohttp-3.9.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c8b04a3dbd54de6ccb7604242fe3ad67f2f3ca558f2d33fe19d4b08d90701a89"},
-    {file = "aiohttp-3.9.4-cp310-cp310-win32.whl", hash = "sha256:8a78dfb198a328bfb38e4308ca8167028920fb747ddcf086ce706fbdd23b2926"},
-    {file = "aiohttp-3.9.4-cp310-cp310-win_amd64.whl", hash = "sha256:e78da6b55275987cbc89141a1d8e75f5070e577c482dd48bd9123a76a96f0bbb"},
-    {file = "aiohttp-3.9.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:c111b3c69060d2bafc446917534150fd049e7aedd6cbf21ba526a5a97b4402a5"},
-    {file = "aiohttp-3.9.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:efbdd51872cf170093998c87ccdf3cb5993add3559341a8e5708bcb311934c94"},
-    {file = "aiohttp-3.9.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7bfdb41dc6e85d8535b00d73947548a748e9534e8e4fddd2638109ff3fb081df"},
-    {file = "aiohttp-3.9.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2bd9d334412961125e9f68d5b73c1d0ab9ea3f74a58a475e6b119f5293eee7ba"},
-    {file = "aiohttp-3.9.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:35d78076736f4a668d57ade00c65d30a8ce28719d8a42471b2a06ccd1a2e3063"},
-    {file = "aiohttp-3.9.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:824dff4f9f4d0f59d0fa3577932ee9a20e09edec8a2f813e1d6b9f89ced8293f"},
-    {file = "aiohttp-3.9.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:52b8b4e06fc15519019e128abedaeb56412b106ab88b3c452188ca47a25c4093"},
-    {file = "aiohttp-3.9.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eae569fb1e7559d4f3919965617bb39f9e753967fae55ce13454bec2d1c54f09"},
-    {file = "aiohttp-3.9.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:69b97aa5792428f321f72aeb2f118e56893371f27e0b7d05750bcad06fc42ca1"},
-    {file = "aiohttp-3.9.4-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:4d79aad0ad4b980663316f26d9a492e8fab2af77c69c0f33780a56843ad2f89e"},
-    {file = "aiohttp-3.9.4-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:d6577140cd7db19e430661e4b2653680194ea8c22c994bc65b7a19d8ec834403"},
-    {file = "aiohttp-3.9.4-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:9860d455847cd98eb67897f5957b7cd69fbcb436dd3f06099230f16a66e66f79"},
-    {file = "aiohttp-3.9.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:69ff36d3f8f5652994e08bd22f093e11cfd0444cea310f92e01b45a4e46b624e"},
-    {file = "aiohttp-3.9.4-cp311-cp311-win32.whl", hash = "sha256:e27d3b5ed2c2013bce66ad67ee57cbf614288bda8cdf426c8d8fe548316f1b5f"},
-    {file = "aiohttp-3.9.4-cp311-cp311-win_amd64.whl", hash = "sha256:d6a67e26daa686a6fbdb600a9af8619c80a332556245fa8e86c747d226ab1a1e"},
-    {file = "aiohttp-3.9.4-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:c5ff8ff44825736a4065d8544b43b43ee4c6dd1530f3a08e6c0578a813b0aa35"},
-    {file = "aiohttp-3.9.4-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:d12a244627eba4e9dc52cbf924edef905ddd6cafc6513849b4876076a6f38b0e"},
-    {file = "aiohttp-3.9.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:dcad56c8d8348e7e468899d2fb3b309b9bc59d94e6db08710555f7436156097f"},
-    {file = "aiohttp-3.9.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4f7e69a7fd4b5ce419238388e55abd220336bd32212c673ceabc57ccf3d05b55"},
-    {file = "aiohttp-3.9.4-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c4870cb049f10d7680c239b55428916d84158798eb8f353e74fa2c98980dcc0b"},
-    {file = "aiohttp-3.9.4-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3b2feaf1b7031ede1bc0880cec4b0776fd347259a723d625357bb4b82f62687b"},
-    {file = "aiohttp-3.9.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:939393e8c3f0a5bcd33ef7ace67680c318dc2ae406f15e381c0054dd658397de"},
-    {file = "aiohttp-3.9.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7d2334e387b2adcc944680bebcf412743f2caf4eeebd550f67249c1c3696be04"},
-    {file = "aiohttp-3.9.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:e0198ea897680e480845ec0ffc5a14e8b694e25b3f104f63676d55bf76a82f1a"},
-    {file = "aiohttp-3.9.4-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:e40d2cd22914d67c84824045861a5bb0fb46586b15dfe4f046c7495bf08306b2"},
-    {file = "aiohttp-3.9.4-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:aba80e77c227f4234aa34a5ff2b6ff30c5d6a827a91d22ff6b999de9175d71bd"},
-    {file = "aiohttp-3.9.4-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:fb68dc73bc8ac322d2e392a59a9e396c4f35cb6fdbdd749e139d1d6c985f2527"},
-    {file = "aiohttp-3.9.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:f3460a92638dce7e47062cf088d6e7663adb135e936cb117be88d5e6c48c9d53"},
-    {file = "aiohttp-3.9.4-cp312-cp312-win32.whl", hash = "sha256:32dc814ddbb254f6170bca198fe307920f6c1308a5492f049f7f63554b88ef36"},
-    {file = "aiohttp-3.9.4-cp312-cp312-win_amd64.whl", hash = "sha256:63f41a909d182d2b78fe3abef557fcc14da50c7852f70ae3be60e83ff64edba5"},
-    {file = "aiohttp-3.9.4-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:c3770365675f6be220032f6609a8fbad994d6dcf3ef7dbcf295c7ee70884c9af"},
-    {file = "aiohttp-3.9.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:305edae1dea368ce09bcb858cf5a63a064f3bff4767dec6fa60a0cc0e805a1d3"},
-    {file = "aiohttp-3.9.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:6f121900131d116e4a93b55ab0d12ad72573f967b100e49086e496a9b24523ea"},
-    {file = "aiohttp-3.9.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b71e614c1ae35c3d62a293b19eface83d5e4d194e3eb2fabb10059d33e6e8cbf"},
-    {file = "aiohttp-3.9.4-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:419f009fa4cfde4d16a7fc070d64f36d70a8d35a90d71aa27670bba2be4fd039"},
-    {file = "aiohttp-3.9.4-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7b39476ee69cfe64061fd77a73bf692c40021f8547cda617a3466530ef63f947"},
-    {file = "aiohttp-3.9.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b33f34c9c7decdb2ab99c74be6443942b730b56d9c5ee48fb7df2c86492f293c"},
-    {file = "aiohttp-3.9.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c78700130ce2dcebb1a8103202ae795be2fa8c9351d0dd22338fe3dac74847d9"},
-    {file = "aiohttp-3.9.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:268ba22d917655d1259af2d5659072b7dc11b4e1dc2cb9662fdd867d75afc6a4"},
-    {file = "aiohttp-3.9.4-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:17e7c051f53a0d2ebf33013a9cbf020bb4e098c4bc5bce6f7b0c962108d97eab"},
-    {file = "aiohttp-3.9.4-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:7be99f4abb008cb38e144f85f515598f4c2c8932bf11b65add0ff59c9c876d99"},
-    {file = "aiohttp-3.9.4-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:d58a54d6ff08d2547656356eea8572b224e6f9bbc0cf55fa9966bcaac4ddfb10"},
-    {file = "aiohttp-3.9.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:7673a76772bda15d0d10d1aa881b7911d0580c980dbd16e59d7ba1422b2d83cd"},
-    {file = "aiohttp-3.9.4-cp38-cp38-win32.whl", hash = "sha256:e4370dda04dc8951012f30e1ce7956a0a226ac0714a7b6c389fb2f43f22a250e"},
-    {file = "aiohttp-3.9.4-cp38-cp38-win_amd64.whl", hash = "sha256:eb30c4510a691bb87081192a394fb661860e75ca3896c01c6d186febe7c88530"},
-    {file = "aiohttp-3.9.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:84e90494db7df3be5e056f91412f9fa9e611fbe8ce4aaef70647297f5943b276"},
-    {file = "aiohttp-3.9.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:7d4845f8501ab28ebfdbeab980a50a273b415cf69e96e4e674d43d86a464df9d"},
-    {file = "aiohttp-3.9.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:69046cd9a2a17245c4ce3c1f1a4ff8c70c7701ef222fce3d1d8435f09042bba1"},
-    {file = "aiohttp-3.9.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b73a06bafc8dcc508420db43b4dd5850e41e69de99009d0351c4f3007960019"},
-    {file = "aiohttp-3.9.4-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:418bb0038dfafeac923823c2e63226179976c76f981a2aaad0ad5d51f2229bca"},
-    {file = "aiohttp-3.9.4-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:71a8f241456b6c2668374d5d28398f8e8cdae4cce568aaea54e0f39359cd928d"},
-    {file = "aiohttp-3.9.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:935c369bf8acc2dc26f6eeb5222768aa7c62917c3554f7215f2ead7386b33748"},
-    {file = "aiohttp-3.9.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:74e4e48c8752d14ecfb36d2ebb3d76d614320570e14de0a3aa7a726ff150a03c"},
-    {file = "aiohttp-3.9.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:916b0417aeddf2c8c61291238ce25286f391a6acb6f28005dd9ce282bd6311b6"},
-    {file = "aiohttp-3.9.4-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9b6787b6d0b3518b2ee4cbeadd24a507756ee703adbac1ab6dc7c4434b8c572a"},
-    {file = "aiohttp-3.9.4-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:221204dbda5ef350e8db6287937621cf75e85778b296c9c52260b522231940ed"},
-    {file = "aiohttp-3.9.4-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:10afd99b8251022ddf81eaed1d90f5a988e349ee7d779eb429fb07b670751e8c"},
-    {file = "aiohttp-3.9.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:2506d9f7a9b91033201be9ffe7d89c6a54150b0578803cce5cb84a943d075bc3"},
-    {file = "aiohttp-3.9.4-cp39-cp39-win32.whl", hash = "sha256:e571fdd9efd65e86c6af2f332e0e95dad259bfe6beb5d15b3c3eca3a6eb5d87b"},
-    {file = "aiohttp-3.9.4-cp39-cp39-win_amd64.whl", hash = "sha256:7d29dd5319d20aa3b7749719ac9685fbd926f71ac8c77b2477272725f882072d"},
-    {file = "aiohttp-3.9.4.tar.gz", hash = "sha256:6ff71ede6d9a5a58cfb7b6fffc83ab5d4a63138276c771ac91ceaaddf5459644"},
-]
-
-[package.dependencies]
-aiosignal = ">=1.1.2"
-async-timeout = {version = ">=4.0,<5.0", markers = "python_version < \"3.11\""}
-attrs = ">=17.3.0"
-frozenlist = ">=1.1.1"
-multidict = ">=4.5,<7.0"
-yarl = ">=1.0,<2.0"
-
-[package.extras]
-speedups = ["Brotli", "aiodns", "brotlicffi"]
-
-[[package]]
-name = "aiosignal"
-version = "1.3.1"
-description = "aiosignal: a list of registered asynchronous callbacks"
-optional = false
-python-versions = ">=3.7"
-files = [
-    {file = "aiosignal-1.3.1-py3-none-any.whl", hash = "sha256:f8376fb07dd1e86a584e4fcdec80b36b7f81aac666ebc724e2c090300dd83b17"},
-    {file = "aiosignal-1.3.1.tar.gz", hash = "sha256:54cd96e15e1649b75d6c87526a6ff0b6c1b0dd3459f43d9ca11d48c339b68cfc"},
-]
-
-[package.dependencies]
-frozenlist = ">=1.1.0"
+# This file is automatically @generated by Poetry 1.5.1 and should not be changed by hand.
 
 [[package]]
 name = "annotated-types"
@@ -172,47 +62,6 @@ six = ">=1.12.0"
 astroid = ["astroid (>=1,<2)", "astroid (>=2,<4)"]
 test = ["astroid (>=1,<2)", "astroid (>=2,<4)", "pytest"]
 
-[[package]]
-name = "async-timeout"
-version = "4.0.3"
-description = "Timeout context manager for asyncio programs"
-optional = false
-python-versions = ">=3.7"
-files = [
-    {file = "async-timeout-4.0.3.tar.gz", hash = "sha256:4640d96be84d82d02ed59ea2b7105a0f7b33abe8703703cd0ab0bf87c427522f"},
-    {file = "async_timeout-4.0.3-py3-none-any.whl", hash = "sha256:7405140ff1230c310e51dc27b3145b9092d659ce68ff733fb0cefe3ee42be028"},
-]
-
-[[package]]
-name = "attrs"
-version = "23.2.0"
-description = "Classes Without Boilerplate"
-optional = false
-python-versions = ">=3.7"
-files = [
-    {file = "attrs-23.2.0-py3-none-any.whl", hash = "sha256:99b87a485a5820b23b879f04c2305b44b951b502fd64be915879d77a7e8fc6f1"},
-    {file = "attrs-23.2.0.tar.gz", hash = "sha256:935dc3b529c262f6cf76e50877d35a4bd3c1de194fd41f47a2b7ae8f19971f30"},
-]
-
-[package.extras]
-cov = ["attrs[tests]", "coverage[toml] (>=5.3)"]
-dev = ["attrs[tests]", "pre-commit"]
-docs = ["furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier", "zope-interface"]
-tests = ["attrs[tests-no-zope]", "zope-interface"]
-tests-mypy = ["mypy (>=1.6)", "pytest-mypy-plugins"]
-tests-no-zope = ["attrs[tests-mypy]", "cloudpickle", "hypothesis", "pympler", "pytest (>=4.3.0)", "pytest-xdist[psutil]"]
-
-[[package]]
-name = "backoff"
-version = "2.2.1"
-description = "Function decoration for backoff and retry"
-optional = false
-python-versions = ">=3.7,<4.0"
-files = [
-    {file = "backoff-2.2.1-py3-none-any.whl", hash = "sha256:63579f9a0628e06278f7e47b7d7d5b6ce20dc65c5e96a6f3ca99a6adca0396e8"},
-    {file = "backoff-2.2.1.tar.gz", hash = "sha256:03f829f5bb1923180821643f8753b0502c3b682293992485b0eef2807afa5cba"},
-]
-
 [[package]]
 name = "black"
 version = "24.4.0"
@@ -259,6 +108,47 @@ d = ["aiohttp (>=3.7.4)", "aiohttp (>=3.7.4,!=3.9.0)"]
 jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"]
 uvloop = ["uvloop (>=0.15.2)"]
 
+[[package]]
+name = "boto3"
+version = "1.34.98"
+description = "The AWS SDK for Python"
+optional = true
+python-versions = ">=3.8"
+files = [
+    {file = "boto3-1.34.98-py3-none-any.whl", hash = "sha256:030e43b8efe22b4cf10b9f3ef9e30cd4cf9ef9784b26efe9a4583339f2b2bcec"},
+    {file = "boto3-1.34.98.tar.gz", hash = "sha256:28c10956033fa79e64529f48c3b62db86d5e4b77024a7343764b6bde6b553543"},
+]
+
+[package.dependencies]
+botocore = ">=1.34.98,<1.35.0"
+jmespath = ">=0.7.1,<2.0.0"
+s3transfer = ">=0.10.0,<0.11.0"
+
+[package.extras]
+crt = ["botocore[crt] (>=1.21.0,<2.0a0)"]
+
+[[package]]
+name = "botocore"
+version = "1.34.98"
+description = "Low-level, data-driven core of boto 3."
+optional = true
+python-versions = ">=3.8"
+files = [
+    {file = "botocore-1.34.98-py3-none-any.whl", hash = "sha256:631c0031d8ce922b5752ab395ead896a0281b0dc74745a754d0351a27c5d83de"},
+    {file = "botocore-1.34.98.tar.gz", hash = "sha256:4cee65df02f4b0be08ad1401965cc89efafebc50ef0727d2d17083c7f1ed2831"},
+]
+
+[package.dependencies]
+jmespath = ">=0.7.1,<2.0.0"
+python-dateutil = ">=2.1,<3.0.0"
+urllib3 = [
+    {version = ">=1.25.4,<1.27", markers = "python_version < \"3.10\""},
+    {version = ">=1.25.4,<2.2.0 || >2.2.0,<3", markers = "python_version >= \"3.10\""},
+]
+
+[package.extras]
+crt = ["awscrt (==0.20.9)"]
+
 [[package]]
 name = "cachetools"
 version = "5.3.3"
@@ -460,22 +350,24 @@ colorama = {version = "*", markers = "platform_system == \"Windows\""}
 
 [[package]]
 name = "cohere"
-version = "4.57"
-description = "Python SDK for the Cohere API"
+version = "5.3.2"
+description = ""
 optional = false
-python-versions = ">=3.8,<4.0"
+python-versions = "<4.0,>=3.8"
 files = [
-    {file = "cohere-4.57-py3-none-any.whl", hash = "sha256:479bdea81ae119e53f671f1ae808fcff9df88211780525d7ef2f7b99dfb32e59"},
-    {file = "cohere-4.57.tar.gz", hash = "sha256:71ace0204a92d1a2a8d4b949b88b353b4f22fc645486851924284cc5a0eb700d"},
+    {file = "cohere-5.3.2-py3-none-any.whl", hash = "sha256:98fe701966f2f39a51f86d3827339576491ecfda080ed6e9710109c3245a5c73"},
+    {file = "cohere-5.3.2.tar.gz", hash = "sha256:337905bd7bd7f3958ab4db3029d3d2abc43f789c957b0deff0d603d8fabc4838"},
 ]
 
 [package.dependencies]
-aiohttp = ">=3.0,<4.0"
-backoff = ">=2.0,<3.0"
-fastavro = ">=1.8,<2.0"
-importlib_metadata = ">=6.0,<7.0"
-requests = ">=2.25.0,<3.0.0"
-urllib3 = ">=1.26,<3"
+fastavro = ">=1.9.4,<2.0.0"
+httpx = ">=0.21.2"
+httpx-sse = ">=0.4.0,<0.5.0"
+pydantic = ">=1.9.2"
+requests = ">=2.0.0,<3.0.0"
+tokenizers = ">=0.15.2,<0.16.0"
+types-requests = ">=2.0.0,<3.0.0"
+typing_extensions = ">=4.0.0"
 
 [[package]]
 name = "colorama"
@@ -872,7 +764,7 @@ tqdm = ">=4.66,<5.0"
 name = "filelock"
 version = "3.13.4"
 description = "A platform independent file lock."
-optional = true
+optional = false
 python-versions = ">=3.8"
 files = [
     {file = "filelock-3.13.4-py3-none-any.whl", hash = "sha256:404e5e9253aa60ad457cae1be07c0f0ca90a63931200a47d9b6a6af84fd7b45f"},
@@ -960,97 +852,11 @@ ufo = ["fs (>=2.2.0,<3)"]
 unicode = ["unicodedata2 (>=15.1.0)"]
 woff = ["brotli (>=1.0.1)", "brotlicffi (>=0.8.0)", "zopfli (>=0.1.4)"]
 
-[[package]]
-name = "frozenlist"
-version = "1.4.1"
-description = "A list-like structure which implements collections.abc.MutableSequence"
-optional = false
-python-versions = ">=3.8"
-files = [
-    {file = "frozenlist-1.4.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:f9aa1878d1083b276b0196f2dfbe00c9b7e752475ed3b682025ff20c1c1f51ac"},
-    {file = "frozenlist-1.4.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:29acab3f66f0f24674b7dc4736477bcd4bc3ad4b896f5f45379a67bce8b96868"},
-    {file = "frozenlist-1.4.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:74fb4bee6880b529a0c6560885fce4dc95936920f9f20f53d99a213f7bf66776"},
-    {file = "frozenlist-1.4.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:590344787a90ae57d62511dd7c736ed56b428f04cd8c161fcc5e7232c130c69a"},
-    {file = "frozenlist-1.4.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:068b63f23b17df8569b7fdca5517edef76171cf3897eb68beb01341131fbd2ad"},
-    {file = "frozenlist-1.4.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5c849d495bf5154cd8da18a9eb15db127d4dba2968d88831aff6f0331ea9bd4c"},
-    {file = "frozenlist-1.4.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9750cc7fe1ae3b1611bb8cfc3f9ec11d532244235d75901fb6b8e42ce9229dfe"},
-    {file = "frozenlist-1.4.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a9b2de4cf0cdd5bd2dee4c4f63a653c61d2408055ab77b151c1957f221cabf2a"},
-    {file = "frozenlist-1.4.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:0633c8d5337cb5c77acbccc6357ac49a1770b8c487e5b3505c57b949b4b82e98"},
-    {file = "frozenlist-1.4.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:27657df69e8801be6c3638054e202a135c7f299267f1a55ed3a598934f6c0d75"},
-    {file = "frozenlist-1.4.1-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:f9a3ea26252bd92f570600098783d1371354d89d5f6b7dfd87359d669f2109b5"},
-    {file = "frozenlist-1.4.1-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:4f57dab5fe3407b6c0c1cc907ac98e8a189f9e418f3b6e54d65a718aaafe3950"},
-    {file = "frozenlist-1.4.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:e02a0e11cf6597299b9f3bbd3f93d79217cb90cfd1411aec33848b13f5c656cc"},
-    {file = "frozenlist-1.4.1-cp310-cp310-win32.whl", hash = "sha256:a828c57f00f729620a442881cc60e57cfcec6842ba38e1b19fd3e47ac0ff8dc1"},
-    {file = "frozenlist-1.4.1-cp310-cp310-win_amd64.whl", hash = "sha256:f56e2333dda1fe0f909e7cc59f021eba0d2307bc6f012a1ccf2beca6ba362439"},
-    {file = "frozenlist-1.4.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:a0cb6f11204443f27a1628b0e460f37fb30f624be6051d490fa7d7e26d4af3d0"},
-    {file = "frozenlist-1.4.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b46c8ae3a8f1f41a0d2ef350c0b6e65822d80772fe46b653ab6b6274f61d4a49"},
-    {file = "frozenlist-1.4.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:fde5bd59ab5357e3853313127f4d3565fc7dad314a74d7b5d43c22c6a5ed2ced"},
-    {file = "frozenlist-1.4.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:722e1124aec435320ae01ee3ac7bec11a5d47f25d0ed6328f2273d287bc3abb0"},
-    {file = "frozenlist-1.4.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2471c201b70d58a0f0c1f91261542a03d9a5e088ed3dc6c160d614c01649c106"},
-    {file = "frozenlist-1.4.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c757a9dd70d72b076d6f68efdbb9bc943665ae954dad2801b874c8c69e185068"},
-    {file = "frozenlist-1.4.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f146e0911cb2f1da549fc58fc7bcd2b836a44b79ef871980d605ec392ff6b0d2"},
-    {file = "frozenlist-1.4.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4f9c515e7914626b2a2e1e311794b4c35720a0be87af52b79ff8e1429fc25f19"},
-    {file = "frozenlist-1.4.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:c302220494f5c1ebeb0912ea782bcd5e2f8308037b3c7553fad0e48ebad6ad82"},
-    {file = "frozenlist-1.4.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:442acde1e068288a4ba7acfe05f5f343e19fac87bfc96d89eb886b0363e977ec"},
-    {file = "frozenlist-1.4.1-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:1b280e6507ea8a4fa0c0a7150b4e526a8d113989e28eaaef946cc77ffd7efc0a"},
-    {file = "frozenlist-1.4.1-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:fe1a06da377e3a1062ae5fe0926e12b84eceb8a50b350ddca72dc85015873f74"},
-    {file = "frozenlist-1.4.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:db9e724bebd621d9beca794f2a4ff1d26eed5965b004a97f1f1685a173b869c2"},
-    {file = "frozenlist-1.4.1-cp311-cp311-win32.whl", hash = "sha256:e774d53b1a477a67838a904131c4b0eef6b3d8a651f8b138b04f748fccfefe17"},
-    {file = "frozenlist-1.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:fb3c2db03683b5767dedb5769b8a40ebb47d6f7f45b1b3e3b4b51ec8ad9d9825"},
-    {file = "frozenlist-1.4.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:1979bc0aeb89b33b588c51c54ab0161791149f2461ea7c7c946d95d5f93b56ae"},
-    {file = "frozenlist-1.4.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:cc7b01b3754ea68a62bd77ce6020afaffb44a590c2289089289363472d13aedb"},
-    {file = "frozenlist-1.4.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c9c92be9fd329ac801cc420e08452b70e7aeab94ea4233a4804f0915c14eba9b"},
-    {file = "frozenlist-1.4.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5c3894db91f5a489fc8fa6a9991820f368f0b3cbdb9cd8849547ccfab3392d86"},
-    {file = "frozenlist-1.4.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ba60bb19387e13597fb059f32cd4d59445d7b18b69a745b8f8e5db0346f33480"},
-    {file = "frozenlist-1.4.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8aefbba5f69d42246543407ed2461db31006b0f76c4e32dfd6f42215a2c41d09"},
-    {file = "frozenlist-1.4.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:780d3a35680ced9ce682fbcf4cb9c2bad3136eeff760ab33707b71db84664e3a"},
-    {file = "frozenlist-1.4.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9acbb16f06fe7f52f441bb6f413ebae6c37baa6ef9edd49cdd567216da8600cd"},
-    {file = "frozenlist-1.4.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:23b701e65c7b36e4bf15546a89279bd4d8675faabc287d06bbcfac7d3c33e1e6"},
-    {file = "frozenlist-1.4.1-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:3e0153a805a98f5ada7e09826255ba99fb4f7524bb81bf6b47fb702666484ae1"},
-    {file = "frozenlist-1.4.1-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:dd9b1baec094d91bf36ec729445f7769d0d0cf6b64d04d86e45baf89e2b9059b"},
-    {file = "frozenlist-1.4.1-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:1a4471094e146b6790f61b98616ab8e44f72661879cc63fa1049d13ef711e71e"},
-    {file = "frozenlist-1.4.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:5667ed53d68d91920defdf4035d1cdaa3c3121dc0b113255124bcfada1cfa1b8"},
-    {file = "frozenlist-1.4.1-cp312-cp312-win32.whl", hash = "sha256:beee944ae828747fd7cb216a70f120767fc9f4f00bacae8543c14a6831673f89"},
-    {file = "frozenlist-1.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:64536573d0a2cb6e625cf309984e2d873979709f2cf22839bf2d61790b448ad5"},
-    {file = "frozenlist-1.4.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:20b51fa3f588ff2fe658663db52a41a4f7aa6c04f6201449c6c7c476bd255c0d"},
-    {file = "frozenlist-1.4.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:410478a0c562d1a5bcc2f7ea448359fcb050ed48b3c6f6f4f18c313a9bdb1826"},
-    {file = "frozenlist-1.4.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:c6321c9efe29975232da3bd0af0ad216800a47e93d763ce64f291917a381b8eb"},
-    {file = "frozenlist-1.4.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:48f6a4533887e189dae092f1cf981f2e3885175f7a0f33c91fb5b7b682b6bab6"},
-    {file = "frozenlist-1.4.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6eb73fa5426ea69ee0e012fb59cdc76a15b1283d6e32e4f8dc4482ec67d1194d"},
-    {file = "frozenlist-1.4.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fbeb989b5cc29e8daf7f976b421c220f1b8c731cbf22b9130d8815418ea45887"},
-    {file = "frozenlist-1.4.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:32453c1de775c889eb4e22f1197fe3bdfe457d16476ea407472b9442e6295f7a"},
-    {file = "frozenlist-1.4.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:693945278a31f2086d9bf3df0fe8254bbeaef1fe71e1351c3bd730aa7d31c41b"},
-    {file = "frozenlist-1.4.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:1d0ce09d36d53bbbe566fe296965b23b961764c0bcf3ce2fa45f463745c04701"},
-    {file = "frozenlist-1.4.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:3a670dc61eb0d0eb7080890c13de3066790f9049b47b0de04007090807c776b0"},
-    {file = "frozenlist-1.4.1-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:dca69045298ce5c11fd539682cff879cc1e664c245d1c64da929813e54241d11"},
-    {file = "frozenlist-1.4.1-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:a06339f38e9ed3a64e4c4e43aec7f59084033647f908e4259d279a52d3757d09"},
-    {file = "frozenlist-1.4.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:b7f2f9f912dca3934c1baec2e4585a674ef16fe00218d833856408c48d5beee7"},
-    {file = "frozenlist-1.4.1-cp38-cp38-win32.whl", hash = "sha256:e7004be74cbb7d9f34553a5ce5fb08be14fb33bc86f332fb71cbe5216362a497"},
-    {file = "frozenlist-1.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:5a7d70357e7cee13f470c7883a063aae5fe209a493c57d86eb7f5a6f910fae09"},
-    {file = "frozenlist-1.4.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:bfa4a17e17ce9abf47a74ae02f32d014c5e9404b6d9ac7f729e01562bbee601e"},
-    {file = "frozenlist-1.4.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b7e3ed87d4138356775346e6845cccbe66cd9e207f3cd11d2f0b9fd13681359d"},
-    {file = "frozenlist-1.4.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c99169d4ff810155ca50b4da3b075cbde79752443117d89429595c2e8e37fed8"},
-    {file = "frozenlist-1.4.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:edb678da49d9f72c9f6c609fbe41a5dfb9a9282f9e6a2253d5a91e0fc382d7c0"},
-    {file = "frozenlist-1.4.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6db4667b187a6742b33afbbaf05a7bc551ffcf1ced0000a571aedbb4aa42fc7b"},
-    {file = "frozenlist-1.4.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:55fdc093b5a3cb41d420884cdaf37a1e74c3c37a31f46e66286d9145d2063bd0"},
-    {file = "frozenlist-1.4.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:82e8211d69a4f4bc360ea22cd6555f8e61a1bd211d1d5d39d3d228b48c83a897"},
-    {file = "frozenlist-1.4.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:89aa2c2eeb20957be2d950b85974b30a01a762f3308cd02bb15e1ad632e22dc7"},
-    {file = "frozenlist-1.4.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:9d3e0c25a2350080e9319724dede4f31f43a6c9779be48021a7f4ebde8b2d742"},
-    {file = "frozenlist-1.4.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7268252af60904bf52c26173cbadc3a071cece75f873705419c8681f24d3edea"},
-    {file = "frozenlist-1.4.1-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:0c250a29735d4f15321007fb02865f0e6b6a41a6b88f1f523ca1596ab5f50bd5"},
-    {file = "frozenlist-1.4.1-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:96ec70beabbd3b10e8bfe52616a13561e58fe84c0101dd031dc78f250d5128b9"},
-    {file = "frozenlist-1.4.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:23b2d7679b73fe0e5a4560b672a39f98dfc6f60df63823b0a9970525325b95f6"},
-    {file = "frozenlist-1.4.1-cp39-cp39-win32.whl", hash = "sha256:a7496bfe1da7fb1a4e1cc23bb67c58fab69311cc7d32b5a99c2007b4b2a0e932"},
-    {file = "frozenlist-1.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:e6a20a581f9ce92d389a8c7d7c3dd47c81fd5d6e655c8dddf341e14aa48659d0"},
-    {file = "frozenlist-1.4.1-py3-none-any.whl", hash = "sha256:04ced3e6a46b4cfffe20f9ae482818e34eba9b5fb0ce4056e4cc9b6e212d09b7"},
-    {file = "frozenlist-1.4.1.tar.gz", hash = "sha256:c037a86e8513059a2613aaba4d817bb90b9d9b6b69aace3ce9c877e8c8ed402b"},
-]
-
 [[package]]
 name = "fsspec"
 version = "2024.3.1"
 description = "File-system specification"
-optional = true
+optional = false
 python-versions = ">=3.8"
 files = [
     {file = "fsspec-2024.3.1-py3-none-any.whl", hash = "sha256:918d18d41bf73f0e2b261824baeb1b124bcf771767e3a26425cd7dec3332f512"},
@@ -1096,12 +902,12 @@ files = [
 google-auth = ">=2.14.1,<3.0.dev0"
 googleapis-common-protos = ">=1.56.2,<2.0.dev0"
 grpcio = [
+    {version = ">=1.33.2,<2.0dev", optional = true, markers = "extra == \"grpc\""},
     {version = ">=1.49.1,<2.0dev", optional = true, markers = "python_version >= \"3.11\" and extra == \"grpc\""},
-    {version = ">=1.33.2,<2.0dev", optional = true, markers = "python_version < \"3.11\" and extra == \"grpc\""},
 ]
 grpcio-status = [
+    {version = ">=1.33.2,<2.0.dev0", optional = true, markers = "extra == \"grpc\""},
     {version = ">=1.49.1,<2.0.dev0", optional = true, markers = "python_version >= \"3.11\" and extra == \"grpc\""},
-    {version = ">=1.33.2,<2.0.dev0", optional = true, markers = "python_version < \"3.11\" and extra == \"grpc\""},
 ]
 proto-plus = ">=1.22.3,<2.0.0dev"
 protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.0 || >4.21.0,<4.21.1 || >4.21.1,<4.21.2 || >4.21.2,<4.21.3 || >4.21.3,<4.21.4 || >4.21.4,<4.21.5 || >4.21.5,<5.0.0.dev0"
@@ -1635,11 +1441,22 @@ cli = ["click (==8.*)", "pygments (==2.*)", "rich (>=10,<14)"]
 http2 = ["h2 (>=3,<5)"]
 socks = ["socksio (==1.*)"]
 
+[[package]]
+name = "httpx-sse"
+version = "0.4.0"
+description = "Consume Server-Sent Event (SSE) messages with HTTPX."
+optional = false
+python-versions = ">=3.8"
+files = [
+    {file = "httpx-sse-0.4.0.tar.gz", hash = "sha256:1e81a3a3070ce322add1d3529ed42eb5f70817f45ed6ec915ab753f961139721"},
+    {file = "httpx_sse-0.4.0-py3-none-any.whl", hash = "sha256:f329af6eae57eaa2bdfd962b42524764af68075ea87370a2de920af5341e318f"},
+]
+
 [[package]]
 name = "huggingface-hub"
 version = "0.20.3"
 description = "Client library to download and publish models, datasets and other repos on the huggingface.co hub"
-optional = true
+optional = false
 python-versions = ">=3.8.0"
 files = [
     {file = "huggingface_hub-0.20.3-py3-none-any.whl", hash = "sha256:d988ae4f00d3e307b0c80c6a05ca6dbb7edba8bba3079f74cda7d9c2e562a7b6"},
@@ -1857,6 +1674,17 @@ MarkupSafe = ">=2.0"
 [package.extras]
 i18n = ["Babel (>=2.7)"]
 
+[[package]]
+name = "jmespath"
+version = "1.0.1"
+description = "JSON Matching Expressions"
+optional = true
+python-versions = ">=3.7"
+files = [
+    {file = "jmespath-1.0.1-py3-none-any.whl", hash = "sha256:02e2e4cc71b5bcab88332eebf907519190dd9e6e82107fa7f83b1003a6252980"},
+    {file = "jmespath-1.0.1.tar.gz", hash = "sha256:90261b206d6defd58fdd5e85f478bf633a2901798906be2ad389150c5c60edbe"},
+]
+
 [[package]]
 name = "joblib"
 version = "1.4.0"
@@ -2273,105 +2101,6 @@ docs = ["sphinx"]
 gmpy = ["gmpy2 (>=2.1.0a4)"]
 tests = ["pytest (>=4.6)"]
 
-[[package]]
-name = "multidict"
-version = "6.0.5"
-description = "multidict implementation"
-optional = false
-python-versions = ">=3.7"
-files = [
-    {file = "multidict-6.0.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:228b644ae063c10e7f324ab1ab6b548bdf6f8b47f3ec234fef1093bc2735e5f9"},
-    {file = "multidict-6.0.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:896ebdcf62683551312c30e20614305f53125750803b614e9e6ce74a96232604"},
-    {file = "multidict-6.0.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:411bf8515f3be9813d06004cac41ccf7d1cd46dfe233705933dd163b60e37600"},
-    {file = "multidict-6.0.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1d147090048129ce3c453f0292e7697d333db95e52616b3793922945804a433c"},
-    {file = "multidict-6.0.5-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:215ed703caf15f578dca76ee6f6b21b7603791ae090fbf1ef9d865571039ade5"},
-    {file = "multidict-6.0.5-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7c6390cf87ff6234643428991b7359b5f59cc15155695deb4eda5c777d2b880f"},
-    {file = "multidict-6.0.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21fd81c4ebdb4f214161be351eb5bcf385426bf023041da2fd9e60681f3cebae"},
-    {file = "multidict-6.0.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3cc2ad10255f903656017363cd59436f2111443a76f996584d1077e43ee51182"},
-    {file = "multidict-6.0.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:6939c95381e003f54cd4c5516740faba40cf5ad3eeff460c3ad1d3e0ea2549bf"},
-    {file = "multidict-6.0.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:220dd781e3f7af2c2c1053da9fa96d9cf3072ca58f057f4c5adaaa1cab8fc442"},
-    {file = "multidict-6.0.5-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:766c8f7511df26d9f11cd3a8be623e59cca73d44643abab3f8c8c07620524e4a"},
-    {file = "multidict-6.0.5-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:fe5d7785250541f7f5019ab9cba2c71169dc7d74d0f45253f8313f436458a4ef"},
-    {file = "multidict-6.0.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c1c1496e73051918fcd4f58ff2e0f2f3066d1c76a0c6aeffd9b45d53243702cc"},
-    {file = "multidict-6.0.5-cp310-cp310-win32.whl", hash = "sha256:7afcdd1fc07befad18ec4523a782cde4e93e0a2bf71239894b8d61ee578c1319"},
-    {file = "multidict-6.0.5-cp310-cp310-win_amd64.whl", hash = "sha256:99f60d34c048c5c2fabc766108c103612344c46e35d4ed9ae0673d33c8fb26e8"},
-    {file = "multidict-6.0.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:f285e862d2f153a70586579c15c44656f888806ed0e5b56b64489afe4a2dbfba"},
-    {file = "multidict-6.0.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:53689bb4e102200a4fafa9de9c7c3c212ab40a7ab2c8e474491914d2305f187e"},
-    {file = "multidict-6.0.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:612d1156111ae11d14afaf3a0669ebf6c170dbb735e510a7438ffe2369a847fd"},
-    {file = "multidict-6.0.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7be7047bd08accdb7487737631d25735c9a04327911de89ff1b26b81745bd4e3"},
-    {file = "multidict-6.0.5-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:de170c7b4fe6859beb8926e84f7d7d6c693dfe8e27372ce3b76f01c46e489fcf"},
-    {file = "multidict-6.0.5-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:04bde7a7b3de05732a4eb39c94574db1ec99abb56162d6c520ad26f83267de29"},
-    {file = "multidict-6.0.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:85f67aed7bb647f93e7520633d8f51d3cbc6ab96957c71272b286b2f30dc70ed"},
-    {file = "multidict-6.0.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:425bf820055005bfc8aa9a0b99ccb52cc2f4070153e34b701acc98d201693733"},
-    {file = "multidict-6.0.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:d3eb1ceec286eba8220c26f3b0096cf189aea7057b6e7b7a2e60ed36b373b77f"},
-    {file = "multidict-6.0.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:7901c05ead4b3fb75113fb1dd33eb1253c6d3ee37ce93305acd9d38e0b5f21a4"},
-    {file = "multidict-6.0.5-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:e0e79d91e71b9867c73323a3444724d496c037e578a0e1755ae159ba14f4f3d1"},
-    {file = "multidict-6.0.5-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:29bfeb0dff5cb5fdab2023a7a9947b3b4af63e9c47cae2a10ad58394b517fddc"},
-    {file = "multidict-6.0.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e030047e85cbcedbfc073f71836d62dd5dadfbe7531cae27789ff66bc551bd5e"},
-    {file = "multidict-6.0.5-cp311-cp311-win32.whl", hash = "sha256:2f4848aa3baa109e6ab81fe2006c77ed4d3cd1e0ac2c1fbddb7b1277c168788c"},
-    {file = "multidict-6.0.5-cp311-cp311-win_amd64.whl", hash = "sha256:2faa5ae9376faba05f630d7e5e6be05be22913782b927b19d12b8145968a85ea"},
-    {file = "multidict-6.0.5-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:51d035609b86722963404f711db441cf7134f1889107fb171a970c9701f92e1e"},
-    {file = "multidict-6.0.5-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:cbebcd5bcaf1eaf302617c114aa67569dd3f090dd0ce8ba9e35e9985b41ac35b"},
-    {file = "multidict-6.0.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2ffc42c922dbfddb4a4c3b438eb056828719f07608af27d163191cb3e3aa6cc5"},
-    {file = "multidict-6.0.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ceb3b7e6a0135e092de86110c5a74e46bda4bd4fbfeeb3a3bcec79c0f861e450"},
-    {file = "multidict-6.0.5-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:79660376075cfd4b2c80f295528aa6beb2058fd289f4c9252f986751a4cd0496"},
-    {file = "multidict-6.0.5-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e4428b29611e989719874670fd152b6625500ad6c686d464e99f5aaeeaca175a"},
-    {file = "multidict-6.0.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d84a5c3a5f7ce6db1f999fb9438f686bc2e09d38143f2d93d8406ed2dd6b9226"},
-    {file = "multidict-6.0.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:76c0de87358b192de7ea9649beb392f107dcad9ad27276324c24c91774ca5271"},
-    {file = "multidict-6.0.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:79a6d2ba910adb2cbafc95dad936f8b9386e77c84c35bc0add315b856d7c3abb"},
-    {file = "multidict-6.0.5-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:92d16a3e275e38293623ebf639c471d3e03bb20b8ebb845237e0d3664914caef"},
-    {file = "multidict-6.0.5-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:fb616be3538599e797a2017cccca78e354c767165e8858ab5116813146041a24"},
-    {file = "multidict-6.0.5-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:14c2976aa9038c2629efa2c148022ed5eb4cb939e15ec7aace7ca932f48f9ba6"},
-    {file = "multidict-6.0.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:435a0984199d81ca178b9ae2c26ec3d49692d20ee29bc4c11a2a8d4514c67eda"},
-    {file = "multidict-6.0.5-cp312-cp312-win32.whl", hash = "sha256:9fe7b0653ba3d9d65cbe7698cca585bf0f8c83dbbcc710db9c90f478e175f2d5"},
-    {file = "multidict-6.0.5-cp312-cp312-win_amd64.whl", hash = "sha256:01265f5e40f5a17f8241d52656ed27192be03bfa8764d88e8220141d1e4b3556"},
-    {file = "multidict-6.0.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:19fe01cea168585ba0f678cad6f58133db2aa14eccaf22f88e4a6dccadfad8b3"},
-    {file = "multidict-6.0.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6bf7a982604375a8d49b6cc1b781c1747f243d91b81035a9b43a2126c04766f5"},
-    {file = "multidict-6.0.5-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:107c0cdefe028703fb5dafe640a409cb146d44a6ae201e55b35a4af8e95457dd"},
-    {file = "multidict-6.0.5-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:403c0911cd5d5791605808b942c88a8155c2592e05332d2bf78f18697a5fa15e"},
-    {file = "multidict-6.0.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aeaf541ddbad8311a87dd695ed9642401131ea39ad7bc8cf3ef3967fd093b626"},
-    {file = "multidict-6.0.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e4972624066095e52b569e02b5ca97dbd7a7ddd4294bf4e7247d52635630dd83"},
-    {file = "multidict-6.0.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d946b0a9eb8aaa590df1fe082cee553ceab173e6cb5b03239716338629c50c7a"},
-    {file = "multidict-6.0.5-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:b55358304d7a73d7bdf5de62494aaf70bd33015831ffd98bc498b433dfe5b10c"},
-    {file = "multidict-6.0.5-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:a3145cb08d8625b2d3fee1b2d596a8766352979c9bffe5d7833e0503d0f0b5e5"},
-    {file = "multidict-6.0.5-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:d65f25da8e248202bd47445cec78e0025c0fe7582b23ec69c3b27a640dd7a8e3"},
-    {file = "multidict-6.0.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:c9bf56195c6bbd293340ea82eafd0071cb3d450c703d2c93afb89f93b8386ccc"},
-    {file = "multidict-6.0.5-cp37-cp37m-win32.whl", hash = "sha256:69db76c09796b313331bb7048229e3bee7928eb62bab5e071e9f7fcc4879caee"},
-    {file = "multidict-6.0.5-cp37-cp37m-win_amd64.whl", hash = "sha256:fce28b3c8a81b6b36dfac9feb1de115bab619b3c13905b419ec71d03a3fc1423"},
-    {file = "multidict-6.0.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:76f067f5121dcecf0d63a67f29080b26c43c71a98b10c701b0677e4a065fbd54"},
-    {file = "multidict-6.0.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b82cc8ace10ab5bd93235dfaab2021c70637005e1ac787031f4d1da63d493c1d"},
-    {file = "multidict-6.0.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:5cb241881eefd96b46f89b1a056187ea8e9ba14ab88ba632e68d7a2ecb7aadf7"},
-    {file = "multidict-6.0.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e8e94e6912639a02ce173341ff62cc1201232ab86b8a8fcc05572741a5dc7d93"},
-    {file = "multidict-6.0.5-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:09a892e4a9fb47331da06948690ae38eaa2426de97b4ccbfafbdcbe5c8f37ff8"},
-    {file = "multidict-6.0.5-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:55205d03e8a598cfc688c71ca8ea5f66447164efff8869517f175ea632c7cb7b"},
-    {file = "multidict-6.0.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:37b15024f864916b4951adb95d3a80c9431299080341ab9544ed148091b53f50"},
-    {file = "multidict-6.0.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f2a1dee728b52b33eebff5072817176c172050d44d67befd681609b4746e1c2e"},
-    {file = "multidict-6.0.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:edd08e6f2f1a390bf137080507e44ccc086353c8e98c657e666c017718561b89"},
-    {file = "multidict-6.0.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:60d698e8179a42ec85172d12f50b1668254628425a6bd611aba022257cac1386"},
-    {file = "multidict-6.0.5-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:3d25f19500588cbc47dc19081d78131c32637c25804df8414463ec908631e453"},
-    {file = "multidict-6.0.5-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:4cc0ef8b962ac7a5e62b9e826bd0cd5040e7d401bc45a6835910ed699037a461"},
-    {file = "multidict-6.0.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:eca2e9d0cc5a889850e9bbd68e98314ada174ff6ccd1129500103df7a94a7a44"},
-    {file = "multidict-6.0.5-cp38-cp38-win32.whl", hash = "sha256:4a6a4f196f08c58c59e0b8ef8ec441d12aee4125a7d4f4fef000ccb22f8d7241"},
-    {file = "multidict-6.0.5-cp38-cp38-win_amd64.whl", hash = "sha256:0275e35209c27a3f7951e1ce7aaf93ce0d163b28948444bec61dd7badc6d3f8c"},
-    {file = "multidict-6.0.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:e7be68734bd8c9a513f2b0cfd508802d6609da068f40dc57d4e3494cefc92929"},
-    {file = "multidict-6.0.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:1d9ea7a7e779d7a3561aade7d596649fbecfa5c08a7674b11b423783217933f9"},
-    {file = "multidict-6.0.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ea1456df2a27c73ce51120fa2f519f1bea2f4a03a917f4a43c8707cf4cbbae1a"},
-    {file = "multidict-6.0.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cf590b134eb70629e350691ecca88eac3e3b8b3c86992042fb82e3cb1830d5e1"},
-    {file = "multidict-6.0.5-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5c0631926c4f58e9a5ccce555ad7747d9a9f8b10619621f22f9635f069f6233e"},
-    {file = "multidict-6.0.5-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dce1c6912ab9ff5f179eaf6efe7365c1f425ed690b03341911bf4939ef2f3046"},
-    {file = "multidict-6.0.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0868d64af83169e4d4152ec612637a543f7a336e4a307b119e98042e852ad9c"},
-    {file = "multidict-6.0.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:141b43360bfd3bdd75f15ed811850763555a251e38b2405967f8e25fb43f7d40"},
-    {file = "multidict-6.0.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:7df704ca8cf4a073334e0427ae2345323613e4df18cc224f647f251e5e75a527"},
-    {file = "multidict-6.0.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:6214c5a5571802c33f80e6c84713b2c79e024995b9c5897f794b43e714daeec9"},
-    {file = "multidict-6.0.5-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:cd6c8fca38178e12c00418de737aef1261576bd1b6e8c6134d3e729a4e858b38"},
-    {file = "multidict-6.0.5-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:e02021f87a5b6932fa6ce916ca004c4d441509d33bbdbeca70d05dff5e9d2479"},
-    {file = "multidict-6.0.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ebd8d160f91a764652d3e51ce0d2956b38efe37c9231cd82cfc0bed2e40b581c"},
-    {file = "multidict-6.0.5-cp39-cp39-win32.whl", hash = "sha256:04da1bb8c8dbadf2a18a452639771951c662c5ad03aefe4884775454be322c9b"},
-    {file = "multidict-6.0.5-cp39-cp39-win_amd64.whl", hash = "sha256:d6f6d4f185481c9669b9447bf9d9cf3b95a0e9df9d169bbc17e363b7d5487755"},
-    {file = "multidict-6.0.5-py3-none-any.whl", hash = "sha256:0d63c74e3d7ab26de115c49bffc92cc77ed23395303d496eae515d4204a625e7"},
-    {file = "multidict-6.0.5.tar.gz", hash = "sha256:f7e301075edaf50500f0b341543c41194d8df3ae5caf4702f2095f3ca73dd8da"},
-]
-
 [[package]]
 name = "mypy"
 version = "1.9.0"
@@ -3508,6 +3237,7 @@ files = [
     {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"},
     {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"},
     {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"},
+    {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a08c6f0fe150303c1c6b71ebcd7213c2858041a7e01975da3a99aed1e7a378ef"},
     {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"},
     {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"},
     {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"},
@@ -3853,6 +3583,23 @@ files = [
     {file = "ruff-0.1.15.tar.gz", hash = "sha256:f6dfa8c1b21c913c326919056c390966648b680966febcb796cc9d1aaab8564e"},
 ]
 
+[[package]]
+name = "s3transfer"
+version = "0.10.1"
+description = "An Amazon S3 Transfer Manager"
+optional = true
+python-versions = ">= 3.8"
+files = [
+    {file = "s3transfer-0.10.1-py3-none-any.whl", hash = "sha256:ceb252b11bcf87080fb7850a224fb6e05c8a776bab8f2b64b7f25b969464839d"},
+    {file = "s3transfer-0.10.1.tar.gz", hash = "sha256:5683916b4c724f799e600f41dd9e10a9ff19871bf87623cc8f491cb4f5fa0a19"},
+]
+
+[package.dependencies]
+botocore = ">=1.33.2,<2.0a.0"
+
+[package.extras]
+crt = ["botocore[crt] (>=1.33.2,<2.0a.0)"]
+
 [[package]]
 name = "safetensors"
 version = "0.4.2"
@@ -4169,7 +3916,7 @@ blobfile = ["blobfile (>=2)"]
 name = "tokenizers"
 version = "0.15.2"
 description = ""
-optional = true
+optional = false
 python-versions = ">=3.7"
 files = [
     {file = "tokenizers-0.15.2-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:52f6130c9cbf70544287575a985bf44ae1bda2da7e8c24e97716080593638012"},
@@ -4560,6 +4307,20 @@ files = [
     {file = "types_PyYAML-6.0.12.20240311-py3-none-any.whl", hash = "sha256:b845b06a1c7e54b8e5b4c683043de0d9caf205e7434b3edc678ff2411979b8f6"},
 ]
 
+[[package]]
+name = "types-requests"
+version = "2.31.0.6"
+description = "Typing stubs for requests"
+optional = false
+python-versions = ">=3.7"
+files = [
+    {file = "types-requests-2.31.0.6.tar.gz", hash = "sha256:cd74ce3b53c461f1228a9b783929ac73a666658f223e28ed29753771477b3bd0"},
+    {file = "types_requests-2.31.0.6-py3-none-any.whl", hash = "sha256:a2db9cb228a81da8348b49ad6db3f5519452dd20a9c1e1a868c83c5fe88fd1a9"},
+]
+
+[package.dependencies]
+types-urllib3 = "*"
+
 [[package]]
 name = "types-requests"
 version = "2.31.0.20240406"
@@ -4574,6 +4335,17 @@ files = [
 [package.dependencies]
 urllib3 = ">=2"
 
+[[package]]
+name = "types-urllib3"
+version = "1.26.25.14"
+description = "Typing stubs for urllib3"
+optional = false
+python-versions = "*"
+files = [
+    {file = "types-urllib3-1.26.25.14.tar.gz", hash = "sha256:229b7f577c951b8c1b92c1bc2b2fdb0b49847bd2af6d1cc2a2e3dd340f3bda8f"},
+    {file = "types_urllib3-1.26.25.14-py3-none-any.whl", hash = "sha256:9683bbb7fb72e32bfe9d2be6e04875fbe1b3eeec3cbb4ea231435aa7fd6b4f0e"},
+]
+
 [[package]]
 name = "typing-extensions"
 version = "4.11.0"
@@ -4585,6 +4357,22 @@ files = [
     {file = "typing_extensions-4.11.0.tar.gz", hash = "sha256:83f085bd5ca59c80295fc2a82ab5dac679cbe02b9f33f7d83af68e241bea51b0"},
 ]
 
+[[package]]
+name = "urllib3"
+version = "1.26.18"
+description = "HTTP library with thread-safe connection pooling, file post, and more."
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*"
+files = [
+    {file = "urllib3-1.26.18-py2.py3-none-any.whl", hash = "sha256:34b97092d7e0a3a8cf7cd10e386f401b3737364026c45e622aa02903dffe0f07"},
+    {file = "urllib3-1.26.18.tar.gz", hash = "sha256:f8ecc1bba5667413457c529ab955bf8c67b45db799d159066261719e328580a0"},
+]
+
+[package.extras]
+brotli = ["brotli (==1.0.9)", "brotli (>=1.0.9)", "brotlicffi (>=0.8.0)", "brotlipy (>=0.6.0)"]
+secure = ["certifi", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "ipaddress", "pyOpenSSL (>=0.14)", "urllib3-secure-extra"]
+socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"]
+
 [[package]]
 name = "urllib3"
 version = "2.2.1"
@@ -4637,109 +4425,6 @@ files = [
 [package.extras]
 dev = ["black (>=19.3b0)", "pytest (>=4.6.2)"]
 
-[[package]]
-name = "yarl"
-version = "1.9.4"
-description = "Yet another URL library"
-optional = false
-python-versions = ">=3.7"
-files = [
-    {file = "yarl-1.9.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a8c1df72eb746f4136fe9a2e72b0c9dc1da1cbd23b5372f94b5820ff8ae30e0e"},
-    {file = "yarl-1.9.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a3a6ed1d525bfb91b3fc9b690c5a21bb52de28c018530ad85093cc488bee2dd2"},
-    {file = "yarl-1.9.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c38c9ddb6103ceae4e4498f9c08fac9b590c5c71b0370f98714768e22ac6fa66"},
-    {file = "yarl-1.9.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d9e09c9d74f4566e905a0b8fa668c58109f7624db96a2171f21747abc7524234"},
-    {file = "yarl-1.9.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b8477c1ee4bd47c57d49621a062121c3023609f7a13b8a46953eb6c9716ca392"},
-    {file = "yarl-1.9.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d5ff2c858f5f6a42c2a8e751100f237c5e869cbde669a724f2062d4c4ef93551"},
-    {file = "yarl-1.9.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:357495293086c5b6d34ca9616a43d329317feab7917518bc97a08f9e55648455"},
-    {file = "yarl-1.9.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:54525ae423d7b7a8ee81ba189f131054defdb122cde31ff17477951464c1691c"},
-    {file = "yarl-1.9.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:801e9264d19643548651b9db361ce3287176671fb0117f96b5ac0ee1c3530d53"},
-    {file = "yarl-1.9.4-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e516dc8baf7b380e6c1c26792610230f37147bb754d6426462ab115a02944385"},
-    {file = "yarl-1.9.4-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:7d5aaac37d19b2904bb9dfe12cdb08c8443e7ba7d2852894ad448d4b8f442863"},
-    {file = "yarl-1.9.4-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:54beabb809ffcacbd9d28ac57b0db46e42a6e341a030293fb3185c409e626b8b"},
-    {file = "yarl-1.9.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:bac8d525a8dbc2a1507ec731d2867025d11ceadcb4dd421423a5d42c56818541"},
-    {file = "yarl-1.9.4-cp310-cp310-win32.whl", hash = "sha256:7855426dfbddac81896b6e533ebefc0af2f132d4a47340cee6d22cac7190022d"},
-    {file = "yarl-1.9.4-cp310-cp310-win_amd64.whl", hash = "sha256:848cd2a1df56ddbffeb375535fb62c9d1645dde33ca4d51341378b3f5954429b"},
-    {file = "yarl-1.9.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:35a2b9396879ce32754bd457d31a51ff0a9d426fd9e0e3c33394bf4b9036b099"},
-    {file = "yarl-1.9.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4c7d56b293cc071e82532f70adcbd8b61909eec973ae9d2d1f9b233f3d943f2c"},
-    {file = "yarl-1.9.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d8a1c6c0be645c745a081c192e747c5de06e944a0d21245f4cf7c05e457c36e0"},
-    {file = "yarl-1.9.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4b3c1ffe10069f655ea2d731808e76e0f452fc6c749bea04781daf18e6039525"},
-    {file = "yarl-1.9.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:549d19c84c55d11687ddbd47eeb348a89df9cb30e1993f1b128f4685cd0ebbf8"},
-    {file = "yarl-1.9.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a7409f968456111140c1c95301cadf071bd30a81cbd7ab829169fb9e3d72eae9"},
-    {file = "yarl-1.9.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e23a6d84d9d1738dbc6e38167776107e63307dfc8ad108e580548d1f2c587f42"},
-    {file = "yarl-1.9.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d8b889777de69897406c9fb0b76cdf2fd0f31267861ae7501d93003d55f54fbe"},
-    {file = "yarl-1.9.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:03caa9507d3d3c83bca08650678e25364e1843b484f19986a527630ca376ecce"},
-    {file = "yarl-1.9.4-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:4e9035df8d0880b2f1c7f5031f33f69e071dfe72ee9310cfc76f7b605958ceb9"},
-    {file = "yarl-1.9.4-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:c0ec0ed476f77db9fb29bca17f0a8fcc7bc97ad4c6c1d8959c507decb22e8572"},
-    {file = "yarl-1.9.4-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:ee04010f26d5102399bd17f8df8bc38dc7ccd7701dc77f4a68c5b8d733406958"},
-    {file = "yarl-1.9.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:49a180c2e0743d5d6e0b4d1a9e5f633c62eca3f8a86ba5dd3c471060e352ca98"},
-    {file = "yarl-1.9.4-cp311-cp311-win32.whl", hash = "sha256:81eb57278deb6098a5b62e88ad8281b2ba09f2f1147c4767522353eaa6260b31"},
-    {file = "yarl-1.9.4-cp311-cp311-win_amd64.whl", hash = "sha256:d1d2532b340b692880261c15aee4dc94dd22ca5d61b9db9a8a361953d36410b1"},
-    {file = "yarl-1.9.4-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0d2454f0aef65ea81037759be5ca9947539667eecebca092733b2eb43c965a81"},
-    {file = "yarl-1.9.4-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:44d8ffbb9c06e5a7f529f38f53eda23e50d1ed33c6c869e01481d3fafa6b8142"},
-    {file = "yarl-1.9.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:aaaea1e536f98754a6e5c56091baa1b6ce2f2700cc4a00b0d49eca8dea471074"},
-    {file = "yarl-1.9.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3777ce5536d17989c91696db1d459574e9a9bd37660ea7ee4d3344579bb6f129"},
-    {file = "yarl-1.9.4-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9fc5fc1eeb029757349ad26bbc5880557389a03fa6ada41703db5e068881e5f2"},
-    {file = "yarl-1.9.4-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ea65804b5dc88dacd4a40279af0cdadcfe74b3e5b4c897aa0d81cf86927fee78"},
-    {file = "yarl-1.9.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aa102d6d280a5455ad6a0f9e6d769989638718e938a6a0a2ff3f4a7ff8c62cc4"},
-    {file = "yarl-1.9.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:09efe4615ada057ba2d30df871d2f668af661e971dfeedf0c159927d48bbeff0"},
-    {file = "yarl-1.9.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:008d3e808d03ef28542372d01057fd09168419cdc8f848efe2804f894ae03e51"},
-    {file = "yarl-1.9.4-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:6f5cb257bc2ec58f437da2b37a8cd48f666db96d47b8a3115c29f316313654ff"},
-    {file = "yarl-1.9.4-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:992f18e0ea248ee03b5a6e8b3b4738850ae7dbb172cc41c966462801cbf62cf7"},
-    {file = "yarl-1.9.4-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:0e9d124c191d5b881060a9e5060627694c3bdd1fe24c5eecc8d5d7d0eb6faabc"},
-    {file = "yarl-1.9.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:3986b6f41ad22988e53d5778f91855dc0399b043fc8946d4f2e68af22ee9ff10"},
-    {file = "yarl-1.9.4-cp312-cp312-win32.whl", hash = "sha256:4b21516d181cd77ebd06ce160ef8cc2a5e9ad35fb1c5930882baff5ac865eee7"},
-    {file = "yarl-1.9.4-cp312-cp312-win_amd64.whl", hash = "sha256:a9bd00dc3bc395a662900f33f74feb3e757429e545d831eef5bb280252631984"},
-    {file = "yarl-1.9.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:63b20738b5aac74e239622d2fe30df4fca4942a86e31bf47a81a0e94c14df94f"},
-    {file = "yarl-1.9.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7d7f7de27b8944f1fee2c26a88b4dabc2409d2fea7a9ed3df79b67277644e17"},
-    {file = "yarl-1.9.4-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c74018551e31269d56fab81a728f683667e7c28c04e807ba08f8c9e3bba32f14"},
-    {file = "yarl-1.9.4-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ca06675212f94e7a610e85ca36948bb8fc023e458dd6c63ef71abfd482481aa5"},
-    {file = "yarl-1.9.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5aef935237d60a51a62b86249839b51345f47564208c6ee615ed2a40878dccdd"},
-    {file = "yarl-1.9.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2b134fd795e2322b7684155b7855cc99409d10b2e408056db2b93b51a52accc7"},
-    {file = "yarl-1.9.4-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d25039a474c4c72a5ad4b52495056f843a7ff07b632c1b92ea9043a3d9950f6e"},
-    {file = "yarl-1.9.4-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:f7d6b36dd2e029b6bcb8a13cf19664c7b8e19ab3a58e0fefbb5b8461447ed5ec"},
-    {file = "yarl-1.9.4-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:957b4774373cf6f709359e5c8c4a0af9f6d7875db657adb0feaf8d6cb3c3964c"},
-    {file = "yarl-1.9.4-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:d7eeb6d22331e2fd42fce928a81c697c9ee2d51400bd1a28803965883e13cead"},
-    {file = "yarl-1.9.4-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:6a962e04b8f91f8c4e5917e518d17958e3bdee71fd1d8b88cdce74dd0ebbf434"},
-    {file = "yarl-1.9.4-cp37-cp37m-win32.whl", hash = "sha256:f3bc6af6e2b8f92eced34ef6a96ffb248e863af20ef4fde9448cc8c9b858b749"},
-    {file = "yarl-1.9.4-cp37-cp37m-win_amd64.whl", hash = "sha256:ad4d7a90a92e528aadf4965d685c17dacff3df282db1121136c382dc0b6014d2"},
-    {file = "yarl-1.9.4-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:ec61d826d80fc293ed46c9dd26995921e3a82146feacd952ef0757236fc137be"},
-    {file = "yarl-1.9.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8be9e837ea9113676e5754b43b940b50cce76d9ed7d2461df1af39a8ee674d9f"},
-    {file = "yarl-1.9.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:bef596fdaa8f26e3d66af846bbe77057237cb6e8efff8cd7cc8dff9a62278bbf"},
-    {file = "yarl-1.9.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2d47552b6e52c3319fede1b60b3de120fe83bde9b7bddad11a69fb0af7db32f1"},
-    {file = "yarl-1.9.4-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:84fc30f71689d7fc9168b92788abc977dc8cefa806909565fc2951d02f6b7d57"},
-    {file = "yarl-1.9.4-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4aa9741085f635934f3a2583e16fcf62ba835719a8b2b28fb2917bb0537c1dfa"},
-    {file = "yarl-1.9.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:206a55215e6d05dbc6c98ce598a59e6fbd0c493e2de4ea6cc2f4934d5a18d130"},
-    {file = "yarl-1.9.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:07574b007ee20e5c375a8fe4a0789fad26db905f9813be0f9fef5a68080de559"},
-    {file = "yarl-1.9.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:5a2e2433eb9344a163aced6a5f6c9222c0786e5a9e9cac2c89f0b28433f56e23"},
-    {file = "yarl-1.9.4-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:6ad6d10ed9b67a382b45f29ea028f92d25bc0bc1daf6c5b801b90b5aa70fb9ec"},
-    {file = "yarl-1.9.4-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:6fe79f998a4052d79e1c30eeb7d6c1c1056ad33300f682465e1b4e9b5a188b78"},
-    {file = "yarl-1.9.4-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:a825ec844298c791fd28ed14ed1bffc56a98d15b8c58a20e0e08c1f5f2bea1be"},
-    {file = "yarl-1.9.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8619d6915b3b0b34420cf9b2bb6d81ef59d984cb0fde7544e9ece32b4b3043c3"},
-    {file = "yarl-1.9.4-cp38-cp38-win32.whl", hash = "sha256:686a0c2f85f83463272ddffd4deb5e591c98aac1897d65e92319f729c320eece"},
-    {file = "yarl-1.9.4-cp38-cp38-win_amd64.whl", hash = "sha256:a00862fb23195b6b8322f7d781b0dc1d82cb3bcac346d1e38689370cc1cc398b"},
-    {file = "yarl-1.9.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:604f31d97fa493083ea21bd9b92c419012531c4e17ea6da0f65cacdcf5d0bd27"},
-    {file = "yarl-1.9.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8a854227cf581330ffa2c4824d96e52ee621dd571078a252c25e3a3b3d94a1b1"},
-    {file = "yarl-1.9.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ba6f52cbc7809cd8d74604cce9c14868306ae4aa0282016b641c661f981a6e91"},
-    {file = "yarl-1.9.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a6327976c7c2f4ee6816eff196e25385ccc02cb81427952414a64811037bbc8b"},
-    {file = "yarl-1.9.4-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8397a3817d7dcdd14bb266283cd1d6fc7264a48c186b986f32e86d86d35fbac5"},
-    {file = "yarl-1.9.4-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e0381b4ce23ff92f8170080c97678040fc5b08da85e9e292292aba67fdac6c34"},
-    {file = "yarl-1.9.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:23d32a2594cb5d565d358a92e151315d1b2268bc10f4610d098f96b147370136"},
-    {file = "yarl-1.9.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ddb2a5c08a4eaaba605340fdee8fc08e406c56617566d9643ad8bf6852778fc7"},
-    {file = "yarl-1.9.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:26a1dc6285e03f3cc9e839a2da83bcbf31dcb0d004c72d0730e755b33466c30e"},
-    {file = "yarl-1.9.4-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:18580f672e44ce1238b82f7fb87d727c4a131f3a9d33a5e0e82b793362bf18b4"},
-    {file = "yarl-1.9.4-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:29e0f83f37610f173eb7e7b5562dd71467993495e568e708d99e9d1944f561ec"},
-    {file = "yarl-1.9.4-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:1f23e4fe1e8794f74b6027d7cf19dc25f8b63af1483d91d595d4a07eca1fb26c"},
-    {file = "yarl-1.9.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:db8e58b9d79200c76956cefd14d5c90af54416ff5353c5bfd7cbe58818e26ef0"},
-    {file = "yarl-1.9.4-cp39-cp39-win32.whl", hash = "sha256:c7224cab95645c7ab53791022ae77a4509472613e839dab722a72abe5a684575"},
-    {file = "yarl-1.9.4-cp39-cp39-win_amd64.whl", hash = "sha256:824d6c50492add5da9374875ce72db7a0733b29c2394890aef23d533106e2b15"},
-    {file = "yarl-1.9.4-py3-none-any.whl", hash = "sha256:928cecb0ef9d5a7946eb6ff58417ad2fe9375762382f1bf5c55e61645f2c43ad"},
-    {file = "yarl-1.9.4.tar.gz", hash = "sha256:566db86717cf8080b99b58b083b773a908ae40f06681e87e589a976faf8246bf"},
-]
-
-[package.dependencies]
-idna = ">=2.0"
-multidict = ">=4.0"
-
 [[package]]
 name = "zipp"
 version = "3.18.1"
@@ -4756,6 +4441,7 @@ docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.link
 testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-ignore-flaky", "pytest-mypy", "pytest-ruff (>=0.2.1)"]
 
 [extras]
+bedrock = ["boto3"]
 fastembed = ["fastembed"]
 google = ["google-cloud-aiplatform"]
 hybrid = ["pinecone-text"]
@@ -4769,4 +4455,4 @@ vision = ["pillow", "torch", "torchvision", "transformers"]
 [metadata]
 lock-version = "2.0"
 python-versions = ">=3.9,<3.13"
-content-hash = "9f308d2dd1c067185f9d84721b25d81e7d1e72a239059863bad1f4439a7a26cc"
+content-hash = "24de8cd2a260ccf1ce5f2edba24a165a36d8712fdc63c14a3be60a796b9533fb"
diff --git a/pyproject.toml b/pyproject.toml
index fba7047b0eb73f7f52a66d2fbfeecfd81536375a..d859f6785a44806e9baa3c00f272cb1200d54710 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -1,6 +1,6 @@
 [tool.poetry]
 name = "semantic-router"
-version = "0.0.39"
+version = "0.0.40"
 description = "Super fast semantic router for AI decision making"
 authors = [
     "James Briggs <james@aurelio.ai>",
@@ -18,7 +18,7 @@ packages = [{include = "semantic_router"}]
 python = ">=3.9,<3.13"
 pydantic = "^2.5.3"
 openai = "^1.10.0"
-cohere = "^4.32"
+cohere = "^5.00"
 mistralai= {version = "^0.0.12", optional = true}
 numpy = "^1.25.2"
 colorlog = "^6.8.0"
@@ -38,6 +38,7 @@ matplotlib = { version = "^3.8.3", optional = true}
 qdrant-client = {version = "^1.8.0", optional = true}
 google-cloud-aiplatform = {version = "^1.45.0", optional = true}
 requests-mock = "^1.12.1"
+boto3 = { version = "^1.34.98", optional = true }
 
 [tool.poetry.extras]
 hybrid = ["pinecone-text"]
@@ -49,6 +50,7 @@ processing = ["matplotlib"]
 mistralai = ["mistralai"]
 qdrant = ["qdrant-client"]
 google = ["google-cloud-aiplatform"]
+bedrock = ["boto3"]
 
 [tool.poetry.group.dev.dependencies]
 ipykernel = "^6.25.0"
diff --git a/semantic_router/__init__.py b/semantic_router/__init__.py
index c0828193a8f4565ad1505d25f379d9145b14f505..37380d1a1523f324cf50b077942010562c32068f 100644
--- a/semantic_router/__init__.py
+++ b/semantic_router/__init__.py
@@ -4,4 +4,4 @@ from semantic_router.route import Route
 
 __all__ = ["RouteLayer", "HybridRouteLayer", "Route", "LayerConfig"]
 
-__version__ = "0.0.39"
+__version__ = "0.0.40"
diff --git a/semantic_router/encoders/__init__.py b/semantic_router/encoders/__init__.py
index 5efc730398a45fc3a9de5f234a6d43a0e37911be..a1026240d37fbfecb1ec8b1445d42fc05f04265f 100644
--- a/semantic_router/encoders/__init__.py
+++ b/semantic_router/encoders/__init__.py
@@ -1,6 +1,7 @@
 from typing import List, Optional
 
 from semantic_router.encoders.base import BaseEncoder
+from semantic_router.encoders.bedrock import BedrockEncoder
 from semantic_router.encoders.bm25 import BM25Encoder
 from semantic_router.encoders.clip import CLIPEncoder
 from semantic_router.encoders.cohere import CohereEncoder
@@ -29,6 +30,7 @@ __all__ = [
     "VitEncoder",
     "CLIPEncoder",
     "GoogleEncoder",
+    "BedrockEncoder",
 ]
 
 
@@ -67,6 +69,8 @@ class AutoEncoder:
             self.model = CLIPEncoder(name=name)
         elif self.type == EncoderType.GOOGLE:
             self.model = GoogleEncoder(name=name)
+        elif self.type == EncoderType.BEDROCK:
+            self.model = BedrockEncoder(name=name)  # type: ignore
         else:
             raise ValueError(f"Encoder type '{type}' not supported")
 
diff --git a/semantic_router/encoders/bedrock.py b/semantic_router/encoders/bedrock.py
new file mode 100644
index 0000000000000000000000000000000000000000..ce04719be7e5fa2117a706938c811803e746b1bc
--- /dev/null
+++ b/semantic_router/encoders/bedrock.py
@@ -0,0 +1,250 @@
+"""
+This module provides the BedrockEncoder class for generating embeddings using Amazon's Bedrock Platform.
+
+The BedrockEncoder class is a subclass of BaseEncoder and utilizes the TextEmbeddingModel from the
+Amazon's Bedrock Platform to generate embeddings for given documents. It requires an AWS Access Key ID
+and AWS Secret Access Key and supports customization of the pre-trained model, score threshold, and region.
+
+Example usage:
+
+    from semantic_router.encoders.bedrock_encoder import BedrockEncoder
+
+    encoder = BedrockEncoder(access_key_id="your-access-key-id", secret_access_key="your-secret-key", region="your-region")
+    embeddings = encoder(["document1", "document2"])
+
+Classes:
+    BedrockEncoder: A class for generating embeddings using the Bedrock Platform.
+"""
+
+import json
+from typing import List, Optional, Any
+import os
+import tiktoken
+from semantic_router.encoders import BaseEncoder
+from semantic_router.utils.defaults import EncoderDefault
+
+
+class BedrockEncoder(BaseEncoder):
+    client: Any = None
+    type: str = "bedrock"
+    input_type: Optional[str] = "search_query"
+    name: str
+    access_key_id: Optional[str] = None
+    secret_access_key: Optional[str] = None
+    session_token: Optional[str] = None
+    region: Optional[str] = None
+
+    def __init__(
+        self,
+        name: str = EncoderDefault.BEDROCK.value["embedding_model"],
+        input_type: Optional[str] = "search_query",
+        score_threshold: float = 0.3,
+        access_key_id: Optional[str] = None,
+        secret_access_key: Optional[str] = None,
+        session_token: Optional[str] = None,
+        region: Optional[str] = None,
+    ):
+        """Initializes the BedrockEncoder.
+
+        Args:
+            name: The name of the pre-trained model to use for embedding.
+                If not provided, the default model specified in EncoderDefault will
+                be used.
+            score_threshold: The threshold for similarity scores.
+            access_key_id: The AWS access key id for an IAM principle.
+                If not provided, it will be retrieved from the access_key_id
+                environment variable.
+            secret_access_key: The secret access key for an IAM principle.
+                If not provided, it will be retrieved from the AWS_SECRET_KEY
+                environment variable.
+            session_token: The session token for an IAM principle.
+                If not provided, it will be retrieved from the AWS_SESSION_TOKEN
+                environment variable.
+            region: The location of the Bedrock resources.
+                If not provided, it will be retrieved from the AWS_REGION
+                environment variable, defaulting to "us-west-1"
+
+        Raises:
+            ValueError: If the Bedrock Platform client fails to initialize.
+        """
+
+        super().__init__(name=name, score_threshold=score_threshold)
+        self.access_key_id = self.get_env_variable("access_key_id", access_key_id)
+        self.secret_access_key = self.get_env_variable(
+            "secret_access_key", secret_access_key
+        )
+        self.session_token = self.get_env_variable("AWS_SESSION_TOKEN", session_token)
+        self.region = self.get_env_variable("AWS_REGION", region, default="us-west-1")
+
+        self.input_type = input_type
+
+        try:
+            self.client = self._initialize_client(
+                self.access_key_id,
+                self.secret_access_key,
+                self.session_token,
+                self.region,
+            )
+
+        except Exception as e:
+            raise ValueError(f"Bedrock client failed to initialise. Error: {e}") from e
+
+    def _initialize_client(
+        self, access_key_id, secret_access_key, session_token, region
+    ):
+        """Initializes the Bedrock client.
+
+        Args:
+            access_key_id: The Amazon access key ID.
+            secret_access_key: The Amazon secret key.
+            region: The location of the AI Platform resources.
+
+        Returns:
+            An instance of the TextEmbeddingModel client.
+
+        Raises:
+            ImportError: If the required Bedrock libraries are not
+            installed.
+            ValueError: If the Bedrock client fails to initialize.
+        """
+        try:
+            import boto3
+        except ImportError:
+            raise ImportError(
+                "Please install Amazon's Boto3 client library to use the BedrockEncoder. "
+                "You can install them with: "
+                "`pip install boto3`"
+            )
+
+        access_key_id = access_key_id or os.getenv("access_key_id")
+        aws_secret_key = secret_access_key or os.getenv("secret_access_key")
+        region = region or os.getenv("AWS_REGION", "us-west-2")
+
+        if access_key_id is None:
+            raise ValueError("AWS access key ID cannot be 'None'.")
+
+        if aws_secret_key is None:
+            raise ValueError("AWS secret access key cannot be 'None'.")
+
+        try:
+            bedrock_client = boto3.client(
+                "bedrock-runtime",
+                aws_access_key_id=access_key_id,
+                aws_secret_access_key=secret_access_key,
+                aws_session_token=session_token,
+                region_name=region,
+            )
+        except Exception as err:
+            raise ValueError(
+                f"The Bedrock client failed to initialize. Error: {err}"
+            ) from err
+
+        return bedrock_client
+
+    def __call__(self, docs: List[str]) -> List[List[float]]:
+        """Generates embeddings for the given documents.
+
+        Args:
+            docs: A list of strings representing the documents to embed.
+
+        Returns:
+            A list of lists, where each inner list contains the embedding values for a
+            document.
+
+        Raises:
+            ValueError: If the Bedrock Platform client is not initialized or if the
+            API call fails.
+        """
+        if self.client is None:
+            raise ValueError("Bedrock client is not initialised.")
+        try:
+            embeddings = []
+
+            def chunk_strings(strings, MAX_WORDS=20):
+                """
+                Breaks up a list of strings into smaller chunks.
+
+                Args:
+                    strings (list): A list of strings to be chunked.
+                    max_chunk_size (int): The maximum size of each chunk. Default is 75.
+
+                Returns:
+                    list: A list of lists, where each inner list contains a chunk of strings.
+                """
+                encoding = tiktoken.get_encoding("cl100k_base")
+                chunked_strings = []
+                current_chunk = []
+
+                for text in strings:
+                    encoded_text = encoding.encode(text)
+
+                    if len(encoded_text) > MAX_WORDS:
+                        current_chunk = [
+                            encoding.decode(encoded_text[i : i + MAX_WORDS])
+                            for i in range(0, len(encoded_text), MAX_WORDS)
+                        ]
+                    else:
+                        current_chunk = [encoding.decode(encoded_text)]
+
+                    chunked_strings.append(current_chunk)
+                return chunked_strings
+
+            if self.name and "amazon" in self.name:
+                for doc in docs:
+                    embedding_body = json.dumps(
+                        {
+                            "inputText": doc,
+                        }
+                    )
+                    response = self.client.invoke_model(
+                        body=embedding_body,
+                        modelId=self.name,
+                        accept="application/json",
+                        contentType="application/json",
+                    )
+
+                    response_body = json.loads(response.get("body").read())
+                    embeddings.append(response_body.get("embedding"))
+            elif self.name and "cohere" in self.name:
+                chunked_docs = chunk_strings(docs)
+                for chunk in chunked_docs:
+                    chunk = json.dumps({"texts": chunk, "input_type": self.input_type})
+
+                    response = self.client.invoke_model(
+                        body=chunk,
+                        modelId=self.name,
+                        accept="*/*",
+                        contentType="application/json",
+                    )
+
+                    response_body = json.loads(response.get("body").read())
+
+                    chunk_embeddings = response_body.get("embeddings")
+                    embeddings.extend(chunk_embeddings)
+            else:
+                raise ValueError("Unknown model name")
+            return embeddings
+        except Exception as e:
+            raise ValueError(f"Bedrock call failed. Error: {e}") from e
+
+    @staticmethod
+    def get_env_variable(var_name, provided_value, default=None):
+        """Retrieves environment variable or uses a provided value.
+
+        Args:
+            var_name (str): The name of the environment variable.
+            provided_value (Optional[str]): The provided value to use if not None.
+            default (Optional[str]): The default value if the environment variable is not set.
+
+        Returns:
+            str: The value of the environment variable or the provided/default value.
+
+        Raises:
+            ValueError: If no value is provided and the environment variable is not set.
+        """
+        if provided_value is not None:
+            return provided_value
+        value = os.getenv(var_name, default)
+        if value is None:
+            raise ValueError(f"No {var_name} provided")
+        return value
diff --git a/semantic_router/encoders/cohere.py b/semantic_router/encoders/cohere.py
index b49769eb4c1b32c36467d299f4905477b522bb1a..3fcac85c1cb6f9cb9165a4dfa5fcb19be1336afa 100644
--- a/semantic_router/encoders/cohere.py
+++ b/semantic_router/encoders/cohere.py
@@ -2,6 +2,7 @@ import os
 from typing import List, Optional
 
 import cohere
+from cohere.types.embed_response import EmbedResponse_EmbeddingsByType
 
 from semantic_router.encoders import BaseEncoder
 from semantic_router.utils.defaults import EncoderDefault
@@ -42,8 +43,14 @@ class CohereEncoder(BaseEncoder):
             raise ValueError("Cohere client is not initialized.")
         try:
             embeds = self.client.embed(
-                docs, input_type=self.input_type, model=self.name
+                texts=docs, input_type=self.input_type, model=self.name
             )
-            return embeds.embeddings
+            # Check for unsupported type.
+            if isinstance(embeds, EmbedResponse_EmbeddingsByType):
+                raise NotImplementedError(
+                    "Handling of EmbedByTypeResponseEmbeddings is not implemented."
+                )
+            else:
+                return embeds.embeddings
         except Exception as e:
             raise ValueError(f"Cohere API call failed. Error: {e}") from e
diff --git a/semantic_router/index/pinecone.py b/semantic_router/index/pinecone.py
index 136422d1fa0bc678db2fe1118a0bd4171598f0c6..de2885243b8e8b17a7eeeee1f23e84a34e9cb964 100644
--- a/semantic_router/index/pinecone.py
+++ b/semantic_router/index/pinecone.py
@@ -38,6 +38,7 @@ class PineconeRecord(BaseModel):
 
 class PineconeIndex(BaseIndex):
     index_prefix: str = "semantic-router--"
+    api_key: Optional[str] = None
     index_name: str = "index"
     dimensions: Union[int, None] = None
     metric: str = "cosine"
@@ -69,7 +70,12 @@ class PineconeIndex(BaseIndex):
         self.host = host
         self.namespace = namespace
         self.type = "pinecone"
-        self.client = self._initialize_client(api_key=api_key)
+        self.api_key = api_key or os.getenv("PINECONE_API_KEY")
+
+        if self.api_key is None:
+            raise ValueError("Pinecone API key is required.")
+
+        self.client = self._initialize_client(api_key=self.api_key)
 
     def _initialize_client(self, api_key: Optional[str] = None):
         try:
@@ -82,9 +88,6 @@ class PineconeIndex(BaseIndex):
                 "You can install it with: "
                 "`pip install 'semantic-router[pinecone]'`"
             )
-        api_key = api_key or os.getenv("PINECONE_API_KEY")
-        if api_key is None:
-            raise ValueError("Pinecone API key is required.")
         pinecone_args = {"api_key": api_key, "source_tag": "semantic-router"}
         if self.namespace:
             pinecone_args["namespace"] = self.namespace
@@ -190,7 +193,7 @@ class PineconeIndex(BaseIndex):
         params: Dict = {}
         if self.namespace:
             params["namespace"] = self.namespace
-        headers = {"Api-Key": os.environ["PINECONE_API_KEY"]}
+        headers = {"Api-Key": self.api_key}
         metadata = []
 
         while True:
diff --git a/semantic_router/schema.py b/semantic_router/schema.py
index 63f1e440a1a816a79a3b37b974d191eac48a24af..86ab123318812dbc3c18a8a6f98a7e4bb186669c 100644
--- a/semantic_router/schema.py
+++ b/semantic_router/schema.py
@@ -15,6 +15,7 @@ class EncoderType(Enum):
     VIT = "vit"
     CLIP = "clip"
     GOOGLE = "google"
+    BEDROCK = "bedrock"
 
 
 class EncoderInfo(BaseModel):
diff --git a/semantic_router/utils/defaults.py b/semantic_router/utils/defaults.py
index 3c9cbb2dd1010f5b861c49fcafad389c591fe9cb..75331c06581ad4692bc24f1633ba5a609ba28e47 100644
--- a/semantic_router/utils/defaults.py
+++ b/semantic_router/utils/defaults.py
@@ -31,3 +31,8 @@ class EncoderDefault(Enum):
             "GOOGLE_EMBEDDING_MODEL", "textembedding-gecko@003"
         ),
     }
+    BEDROCK = {
+        "embedding_model": os.environ.get(
+            "BEDROCK_EMBEDDING_MODEL", "amazon.titan-embed-image-v1"
+        )
+    }
diff --git a/tests/unit/encoders/test_bedrock.py b/tests/unit/encoders/test_bedrock.py
new file mode 100644
index 0000000000000000000000000000000000000000..43955d453c704bc95fcce598b94e0a46479947a0
--- /dev/null
+++ b/tests/unit/encoders/test_bedrock.py
@@ -0,0 +1,116 @@
+import pytest
+import json
+from io import BytesIO
+from semantic_router.encoders import BedrockEncoder
+
+
+@pytest.fixture
+def bedrock_encoder(mocker):
+    mocker.patch("semantic_router.encoders.bedrock.BedrockEncoder._initialize_client")
+    return BedrockEncoder(
+        access_key_id="fake_id",
+        secret_access_key="fake_secret",
+        session_token="fake_token",
+        region="us-west-2",
+    )
+
+
+class TestBedrockEncoder:
+    def test_initialisation_with_default_values(self, bedrock_encoder):
+        assert (
+            bedrock_encoder.input_type == "search_query"
+        ), "Default input type not set correctly"
+        assert bedrock_encoder.region == "us-west-2", "Region should be initialised"
+
+    def test_initialisation_with_custom_values(self, mocker):
+        # mocker.patch(
+        #     "semantic_router.encoders.bedrock.BedrockEncoder._initialize_client"
+        # )
+        name = "custom_model"
+        score_threshold = 0.5
+        input_type = "custom_input"
+        bedrock_encoder = BedrockEncoder(
+            name=name,
+            score_threshold=score_threshold,
+            input_type=input_type,
+            access_key_id="fake_id",
+            secret_access_key="fake_secret",
+            session_token="fake_token",
+            region="us-west-2",
+        )
+        assert bedrock_encoder.name == name, "Custom name not set correctly"
+        assert bedrock_encoder.region == "us-west-2", "Custom region not set correctly"
+        assert (
+            bedrock_encoder.score_threshold == score_threshold
+        ), "Custom score threshold not set correctly"
+        assert (
+            bedrock_encoder.input_type == input_type
+        ), "Custom input type not set correctly"
+
+    def test_call_method(self, bedrock_encoder):
+        response_content = json.dumps({"embedding": [0.1, 0.2, 0.3]})
+        response_body = BytesIO(response_content.encode("utf-8"))
+        mock_response = {"body": response_body}
+        bedrock_encoder.client.invoke_model.return_value = mock_response
+        result = bedrock_encoder(["test"])
+        assert isinstance(result, list), "Result should be a list"
+        assert all(
+            isinstance(item, list) for item in result
+        ), "Each item in result should be a list"
+        assert result == [[0.1, 0.2, 0.3]], "Embedding should be [0.1, 0.2, 0.3]"
+
+    def test_raises_value_error_if_client_is_not_initialised(self, mocker):
+        mocker.patch(
+            "semantic_router.encoders.bedrock.BedrockEncoder._initialize_client",
+            side_effect=Exception("Client initialisation failed"),
+        )
+        with pytest.raises(ValueError):
+            BedrockEncoder(
+                access_key_id="fake_id",
+                secret_access_key="fake_secret",
+                session_token="fake_token",
+                region="us-west-2",
+            )
+
+    def test_raises_value_error_if_call_to_bedrock_fails(self, bedrock_encoder):
+        bedrock_encoder.client.invoke_model.side_effect = Exception(
+            "Bedrock call failed."
+        )
+        with pytest.raises(ValueError):
+            bedrock_encoder(["test"])
+
+
+@pytest.fixture
+def bedrock_encoder_with_cohere(mocker):
+    mocker.patch("semantic_router.encoders.bedrock.BedrockEncoder._initialize_client")
+    return BedrockEncoder(
+        name="cohere_model",
+        access_key_id="fake_id",
+        secret_access_key="fake_secret",
+        session_token="fake_token",
+        region="us-west-2",
+    )
+
+
+class TestBedrockEncoderWithCohere:
+    def test_cohere_embedding_single_chunk(self, bedrock_encoder_with_cohere):
+        response_content = json.dumps({"embeddings": [[0.1, 0.2, 0.3]]})
+        response_body = BytesIO(response_content.encode("utf-8"))
+        mock_response = {"body": response_body}
+        bedrock_encoder_with_cohere.client.invoke_model.return_value = mock_response
+        result = bedrock_encoder_with_cohere(["short test"])
+        assert isinstance(result, list), "Result should be a list"
+        assert all(
+            isinstance(item, list) for item in result
+        ), "Each item should be a list"
+        assert result == [[0.1, 0.2, 0.3]], "Expected embedding [0.1, 0.2, 0.3]"
+
+    def test_cohere_input_type(self, bedrock_encoder_with_cohere):
+        bedrock_encoder_with_cohere.input_type = "different_type"
+        response_content = json.dumps({"embeddings": [[0.1, 0.2, 0.3]]})
+        response_body = BytesIO(response_content.encode("utf-8"))
+        mock_response = {"body": response_body}
+        bedrock_encoder_with_cohere.client.invoke_model.return_value = mock_response
+        result = bedrock_encoder_with_cohere(["test with different input type"])
+        assert isinstance(result, list), "Result should be a list"
+        assert result == [[0.1, 0.2, 0.3]], "Expected specific embeddings"