diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 4de28c8242a6f25cfc5f834cd38ddfe298e74214..d7208e9b6b14200f1b3cd9484bd89eb2b057e74a 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -13,7 +13,7 @@ Please follow these guidelines when making a contribution:
         - Navigating to /semantic-router.
         - Running `make lint` to fix linting issues.
         - Running `black .` to fix `black` linting issues.
-        - Running `ruff . --fix` to fix `ruff` linting issues (where possible, others may need manual changes).
+        - Running `ruff check . --fix` to fix `ruff` linting issues (where possible, others may need manual changes).
         - Running `mypy .` and then fixing any of the issues that are raised.
         - Confirming the linters pass using `make lint` again.
     - Ensure that, for any new code, new [PyTests are written](https://github.com/aurelio-labs/semantic-router/tree/main/tests/unit). If any code is removed, then ensure that corresponding PyTests are also removed. Finally, ensure that all remaining PyTests pass using `pytest ./tests` (to avoid integration tests you can run `pytest ./tests/unit`.
diff --git a/docs/indexes/pinecone-local.ipynb b/docs/indexes/pinecone-local.ipynb
index f08f6e2f6a9ca697d9d2c3038224a7c805cb06ff..5cfc54093e1c98c271a01a4c46d02be207dfd53a 100644
--- a/docs/indexes/pinecone-local.ipynb
+++ b/docs/indexes/pinecone-local.ipynb
@@ -101,17 +101,17 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 9,
+   "execution_count": 2,
    "metadata": {},
    "outputs": [
     {
      "data": {
       "text/plain": [
-       "[Route(name='politics', utterances=[\"isn't politics the best thing ever\", \"why don't you tell me about your political opinions\", \"don't you just love the presidentdon't you just hate the president\", \"they're going to destroy this country!\", 'they will save the country!'], description=None, function_schemas=None, llm=None, score_threshold=0.5, metadata={}),\n",
-       " Route(name='chitchat', utterances=[\"how's the weather today?\", 'how are things going?', 'lovely weather today', 'the weather is horrendous', \"let's go to the chippy\"], description=None, function_schemas=None, llm=None, score_threshold=0.5, metadata={})]"
+       "[Route(name='politics', utterances=[\"isn't politics the best thing ever\", \"why don't you tell me about your political opinions\", \"don't you just love the presidentdon't you just hate the president\", \"they're going to destroy this country!\", 'they will save the country!'], description=None, function_schemas=None, llm=None, score_threshold=None, metadata={}),\n",
+       " Route(name='chitchat', utterances=[\"how's the weather today?\", 'how are things going?', 'lovely weather today', 'the weather is horrendous', \"let's go to the chippy\"], description=None, function_schemas=None, llm=None, score_threshold=None, metadata={})]"
       ]
      },
-     "execution_count": 9,
+     "execution_count": 2,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -122,7 +122,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 10,
+   "execution_count": 3,
    "metadata": {},
    "outputs": [],
    "source": [
@@ -131,7 +131,9 @@
     "from semantic_router.encoders import OpenAIEncoder\n",
     "\n",
     "# get at platform.openai.com\n",
-    "os.environ.get(\"OPENAI_API_KEY\") or getpass(\"Enter OpenAI API key: \")\n",
+    "os.environ[\"OPENAI_API_KEY\"] = os.environ.get(\"OPENAI_API_KEY\") or getpass(\n",
+    "    \"Enter OpenAI API key: \"\n",
+    ")\n",
     "encoder = OpenAIEncoder(\n",
     "    name=\"text-embedding-3-large\", score_threshold=0.5, dimensions=1536\n",
     ")"
@@ -146,43 +148,54 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 11,
+   "execution_count": 4,
    "metadata": {},
    "outputs": [
     {
      "name": "stderr",
      "output_type": "stream",
      "text": [
-      "2025-01-31 00:33:41 - semantic_router.utils.logger - WARNING - pinecone_local.py:146 - __init__() - Pinecone API key: pclocal\n",
-      "2025-01-31 00:33:41 - semantic_router.utils.logger - WARNING - pinecone_local.py:147 - __init__() - Pinecone API key os env: pclocal\n",
-      "2025-01-31 00:33:41 - semantic_router.utils.logger - WARNING - pinecone_local.py:169 - __init__() - Default region changed from us-west-2 to us-east-1 in v0.1.0.dev6\n"
+      "2025-02-03 15:40:01 - semantic_router.utils.logger - WARNING - pinecone.py:169 - __init__() - Default region changed from us-west-2 to us-east-1 in v0.1.0.dev6\n",
+      "2025-02-03 15:40:01 - pinecone_plugin_interface.logging - INFO - discover_namespace_packages.py:12 - discover_subpackages() - Discovering subpackages in _NamespacePath(['c:\\\\Users\\\\awesome\\\\anaconda3\\\\envs\\\\py12\\\\Lib\\\\site-packages\\\\pinecone_plugins'])\n",
+      "2025-02-03 15:40:01 - pinecone_plugin_interface.logging - INFO - discover_plugins.py:9 - discover_plugins() - Looking for plugins in pinecone_plugins.inference\n",
+      "2025-02-03 15:40:01 - pinecone_plugin_interface.logging - INFO - installation.py:10 - install_plugins() - Installing plugin inference into Pinecone\n",
+      "2025-02-03 15:40:01 - semantic_router.utils.logger - ERROR - pinecone.py:233 - _init_index() - index_host exists-pinecone:localhost:5081\n",
+      "2025-02-03 15:40:01 - semantic_router.utils.logger - ERROR - pinecone.py:234 - _init_index() - base_url exists-pinecone:http://localhost:5080\n",
+      "2025-02-03 15:40:01 - semantic_router.utils.logger - ERROR - pinecone.py:251 - _init_index() - index_host exists:http://localhost:5081\n",
+      "2025-02-03 15:40:01 - semantic_router.utils.logger - ERROR - pinecone.py:252 - _init_index() - index exists:<pinecone.data.index.Index object at 0x000002C6C9DC3200>\n"
      ]
     }
    ],
    "source": [
     "import os\n",
-    "from semantic_router.index.pinecone_local import PineconeLocalIndex\n",
+    "from semantic_router.index.pinecone import PineconeIndex\n",
     "\n",
     "os.environ[\"PINECONE_API_KEY\"] = os.environ.get(\"PINECONE_API_KEY\") or getpass(\n",
     "    \"Enter Pinecone API key: \"\n",
     ")\n",
+    "\n",
+    "# Pass the pinecone local hosted url as base url\n",
+    "# os.environ[\"PINECONE_API_BASE_URL\"] = \"https://api.pinecone.io\"\n",
     "os.environ[\"PINECONE_API_BASE_URL\"] = \"http://localhost:5080\"\n",
     "\n",
-    "index = PineconeLocalIndex(index_name=\"route-test\", dimensions=1536)"
+    "index = PineconeIndex(\n",
+    "    index_name=\"route-test\", dimensions=1536, base_url=\"http://localhost:5080\"\n",
+    ")"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 12,
+   "execution_count": 8,
    "metadata": {},
    "outputs": [
     {
      "name": "stderr",
      "output_type": "stream",
      "text": [
-      "2025-01-31 00:33:42 - semantic_router.utils.logger - ERROR - pinecone_local.py:271 - _init_index() - index_host exists:http://localhost:5083\n",
-      "2025-01-31 00:33:42 - semantic_router.utils.logger - ERROR - pinecone_local.py:272 - _init_index() - index exists:<pinecone.data.index.Index object at 0x000001B0F1089070>\n",
-      "2025-01-31 00:33:44 - httpx - INFO - _client.py:1013 - _send_single_request() - HTTP Request: POST https://api.openai.com/v1/embeddings \"HTTP/1.1 200 OK\"\n"
+      "2025-02-03 15:41:01 - semantic_router.utils.logger - ERROR - pinecone.py:233 - _init_index() - index_host exists-pinecone:localhost:5081\n",
+      "2025-02-03 15:41:01 - semantic_router.utils.logger - ERROR - pinecone.py:234 - _init_index() - base_url exists-pinecone:http://localhost:5080\n",
+      "2025-02-03 15:41:01 - semantic_router.utils.logger - ERROR - pinecone.py:251 - _init_index() - index_host exists:http://localhost:5081\n",
+      "2025-02-03 15:41:01 - semantic_router.utils.logger - ERROR - pinecone.py:252 - _init_index() - index exists:<pinecone.data.index.Index object at 0x000002C6CAA8FB90>\n"
      ]
     }
    ],
@@ -206,7 +219,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 6,
+   "execution_count": 9,
    "metadata": {},
    "outputs": [
     {
@@ -215,7 +228,7 @@
        "'http://localhost:5081'"
       ]
      },
-     "execution_count": 6,
+     "execution_count": 9,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -226,7 +239,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 7,
+   "execution_count": 10,
    "metadata": {},
    "outputs": [
     {
@@ -235,7 +248,7 @@
        "'http://localhost:5081'"
       ]
      },
-     "execution_count": 7,
+     "execution_count": 10,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -246,13 +259,14 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 8,
+   "execution_count": 11,
    "metadata": {},
    "outputs": [
     {
      "data": {
       "text/plain": [
-       "{'indexes': [{'dimension': 1536,\n",
+       "{'indexes': [{'deletion_protection': 'disabled',\n",
+       "              'dimension': 1536,\n",
        "              'host': 'localhost:5081',\n",
        "              'metric': 'dotproduct',\n",
        "              'name': 'route-test',\n",
@@ -260,7 +274,7 @@
        "              'status': {'ready': True, 'state': 'Ready'}}]}"
       ]
      },
-     "execution_count": 8,
+     "execution_count": 11,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -271,7 +285,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 24,
+   "execution_count": 12,
    "metadata": {},
    "outputs": [
     {
@@ -280,7 +294,7 @@
        "True"
       ]
      },
-     "execution_count": 24,
+     "execution_count": 12,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -291,7 +305,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 25,
+   "execution_count": 13,
    "metadata": {},
    "outputs": [
     {
@@ -300,7 +314,7 @@
        "True"
       ]
      },
-     "execution_count": 25,
+     "execution_count": 13,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -311,7 +325,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 26,
+   "execution_count": 14,
    "metadata": {},
    "outputs": [
     {
@@ -329,7 +343,7 @@
        " \"  politics: why don't you tell me about your political opinions\"]"
       ]
      },
-     "execution_count": 26,
+     "execution_count": 14,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -340,16 +354,15 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 27,
+   "execution_count": 15,
    "metadata": {},
    "outputs": [
     {
      "name": "stderr",
      "output_type": "stream",
      "text": [
-      "2025-01-29 23:25:18 - httpx - INFO - _client.py:1013 - _send_single_request() - HTTP Request: POST https://api.openai.com/v1/embeddings \"HTTP/1.1 200 OK\"\n",
-      "2025-01-29 23:25:18 - semantic_router.utils.logger - ERROR - pinecone_local.py:581 - query() - retrying query with vector as str\n",
-      "2025-01-29 23:25:18 - semantic_router.utils.logger - INFO - pinecone_local.py:593 - query() - route_names:['politics', 'politics', 'politics', 'chitchat', 'politics']\n"
+      "2025-02-03 15:41:08 - httpx - INFO - _client.py:1013 - _send_single_request() - HTTP Request: POST https://api.openai.com/v1/embeddings \"HTTP/1.1 200 OK\"\n",
+      "2025-02-03 15:41:08 - semantic_router.utils.logger - ERROR - pinecone.py:575 - query() - retrying query with vector as str\n"
      ]
     },
     {
@@ -358,7 +371,7 @@
        "RouteChoice(name='politics', function_call=None, similarity_score=None)"
       ]
      },
-     "execution_count": 27,
+     "execution_count": 15,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -369,7 +382,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 28,
+   "execution_count": 17,
    "metadata": {},
    "outputs": [
     {
@@ -378,7 +391,7 @@
        "['politics', 'chitchat']"
       ]
      },
-     "execution_count": 28,
+     "execution_count": 17,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -389,16 +402,15 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 29,
+   "execution_count": 18,
    "metadata": {},
    "outputs": [
     {
      "name": "stderr",
      "output_type": "stream",
      "text": [
-      "2025-01-29 23:25:27 - httpx - INFO - _client.py:1013 - _send_single_request() - HTTP Request: POST https://api.openai.com/v1/embeddings \"HTTP/1.1 200 OK\"\n",
-      "2025-01-29 23:25:27 - semantic_router.utils.logger - ERROR - pinecone_local.py:581 - query() - retrying query with vector as str\n",
-      "2025-01-29 23:25:27 - semantic_router.utils.logger - INFO - pinecone_local.py:593 - query() - route_names:['chitchat', 'chitchat', 'chitchat', 'chitchat', 'chitchat']\n"
+      "2025-02-03 15:41:17 - httpx - INFO - _client.py:1013 - _send_single_request() - HTTP Request: POST https://api.openai.com/v1/embeddings \"HTTP/1.1 200 OK\"\n",
+      "2025-02-03 15:41:17 - semantic_router.utils.logger - ERROR - pinecone.py:575 - query() - retrying query with vector as str\n"
      ]
     },
     {
@@ -407,7 +419,7 @@
        "RouteChoice(name='chitchat', function_call=None, similarity_score=None)"
       ]
      },
-     "execution_count": 29,
+     "execution_count": 18,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -418,7 +430,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 30,
+   "execution_count": 19,
    "metadata": {},
    "outputs": [
     {
@@ -427,7 +439,7 @@
        "10"
       ]
      },
-     "execution_count": 30,
+     "execution_count": 19,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -445,7 +457,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 31,
+   "execution_count": 20,
    "metadata": {},
    "outputs": [
     {
@@ -458,7 +470,7 @@
        " 'politics#fc6d15f9e6075e6de82b3fbef6722b64353e4eadc8d663b7312a4ed60c43e6f6']"
       ]
      },
-     "execution_count": 31,
+     "execution_count": 20,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -476,16 +488,15 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 32,
+   "execution_count": 21,
    "metadata": {},
    "outputs": [
     {
      "name": "stderr",
      "output_type": "stream",
      "text": [
-      "2025-01-29 23:25:42 - httpx - INFO - _client.py:1013 - _send_single_request() - HTTP Request: POST https://api.openai.com/v1/embeddings \"HTTP/1.1 200 OK\"\n",
-      "2025-01-29 23:25:42 - semantic_router.utils.logger - ERROR - pinecone_local.py:581 - query() - retrying query with vector as str\n",
-      "2025-01-29 23:25:42 - semantic_router.utils.logger - INFO - pinecone_local.py:593 - query() - route_names:['politics', 'politics', 'politics', 'chitchat', 'politics']\n"
+      "2025-02-03 15:41:25 - httpx - INFO - _client.py:1013 - _send_single_request() - HTTP Request: POST https://api.openai.com/v1/embeddings \"HTTP/1.1 200 OK\"\n",
+      "2025-02-03 15:41:25 - semantic_router.utils.logger - ERROR - pinecone.py:575 - query() - retrying query with vector as str\n"
      ]
     },
     {
@@ -494,7 +505,7 @@
        "'politics'"
       ]
      },
-     "execution_count": 32,
+     "execution_count": 21,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -505,16 +516,15 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 33,
+   "execution_count": 22,
    "metadata": {},
    "outputs": [
     {
      "name": "stderr",
      "output_type": "stream",
      "text": [
-      "2025-01-29 23:25:43 - httpx - INFO - _client.py:1013 - _send_single_request() - HTTP Request: POST https://api.openai.com/v1/embeddings \"HTTP/1.1 200 OK\"\n",
-      "2025-01-29 23:25:43 - semantic_router.utils.logger - ERROR - pinecone_local.py:581 - query() - retrying query with vector as str\n",
-      "2025-01-29 23:25:43 - semantic_router.utils.logger - INFO - pinecone_local.py:593 - query() - route_names:['chitchat', 'chitchat', 'chitchat', 'chitchat', 'chitchat']\n"
+      "2025-02-03 15:19:14 - httpx - INFO - _client.py:1013 - _send_single_request() - HTTP Request: POST https://api.openai.com/v1/embeddings \"HTTP/1.1 200 OK\"\n",
+      "2025-02-03 15:19:14 - semantic_router.utils.logger - ERROR - pinecone.py:572 - query() - retrying query with vector as str\n"
      ]
     },
     {
@@ -523,7 +533,7 @@
        "'chitchat'"
       ]
      },
-     "execution_count": 33,
+     "execution_count": 22,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -534,16 +544,15 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 34,
+   "execution_count": 22,
    "metadata": {},
    "outputs": [
     {
      "name": "stderr",
      "output_type": "stream",
      "text": [
-      "2025-01-29 23:25:44 - httpx - INFO - _client.py:1013 - _send_single_request() - HTTP Request: POST https://api.openai.com/v1/embeddings \"HTTP/1.1 200 OK\"\n",
-      "2025-01-29 23:25:44 - semantic_router.utils.logger - ERROR - pinecone_local.py:581 - query() - retrying query with vector as str\n",
-      "2025-01-29 23:25:44 - semantic_router.utils.logger - INFO - pinecone_local.py:593 - query() - route_names:['chitchat', 'politics', 'chitchat', 'politics', 'chitchat']\n"
+      "2025-02-03 15:41:32 - httpx - INFO - _client.py:1013 - _send_single_request() - HTTP Request: POST https://api.openai.com/v1/embeddings \"HTTP/1.1 200 OK\"\n",
+      "2025-02-03 15:41:32 - semantic_router.utils.logger - ERROR - pinecone.py:575 - query() - retrying query with vector as str\n"
      ]
     }
    ],
@@ -560,7 +569,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 35,
+   "execution_count": 24,
    "metadata": {},
    "outputs": [
     {
@@ -569,7 +578,7 @@
        "10"
       ]
      },
-     "execution_count": 35,
+     "execution_count": 24,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -588,22 +597,16 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 36,
+   "execution_count": 23,
    "metadata": {},
    "outputs": [
     {
      "name": "stderr",
      "output_type": "stream",
      "text": [
-      "2025-01-29 23:27:01 - semantic_router.utils.logger - WARNING - pinecone_local.py:628 - _read_config() - Configuration for sr_lock parameter not found in index.\n",
-      "2025-01-29 23:27:01 - semantic_router.utils.logger - INFO - pinecone_local.py:496 - delete() - Deleted 5 vectors from index route-test.\n"
-     ]
-    },
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "index is not None, deleting...\n"
+      "2025-02-03 15:41:39 - semantic_router.utils.logger - WARNING - pinecone.py:611 - _read_config() - Configuration for sr_lock parameter not found in index.\n",
+      "2025-02-03 15:41:39 - semantic_router.utils.logger - INFO - pinecone.py:477 - delete() - index is not None, deleting...\n",
+      "2025-02-03 15:41:39 - semantic_router.utils.logger - INFO - pinecone.py:491 - delete() - Deleted 5 vectors from index route-test.\n"
      ]
     },
     {
@@ -612,7 +615,7 @@
        "5"
       ]
      },
-     "execution_count": 36,
+     "execution_count": 23,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -627,16 +630,15 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 38,
+   "execution_count": 24,
    "metadata": {},
    "outputs": [
     {
      "name": "stderr",
      "output_type": "stream",
      "text": [
-      "2025-01-29 23:27:31 - httpx - INFO - _client.py:1013 - _send_single_request() - HTTP Request: POST https://api.openai.com/v1/embeddings \"HTTP/1.1 200 OK\"\n",
-      "2025-01-29 23:27:31 - semantic_router.utils.logger - ERROR - pinecone_local.py:581 - query() - retrying query with vector as str\n",
-      "2025-01-29 23:27:31 - semantic_router.utils.logger - INFO - pinecone_local.py:593 - query() - route_names:['chitchat', 'chitchat', 'chitchat', 'chitchat', 'chitchat']\n"
+      "2025-02-03 15:41:49 - httpx - INFO - _client.py:1013 - _send_single_request() - HTTP Request: POST https://api.openai.com/v1/embeddings \"HTTP/1.1 200 OK\"\n",
+      "2025-02-03 15:41:49 - semantic_router.utils.logger - ERROR - pinecone.py:575 - query() - retrying query with vector as str\n"
      ]
     }
    ],
@@ -646,7 +648,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 39,
+   "execution_count": 25,
    "metadata": {},
    "outputs": [
     {
@@ -655,7 +657,7 @@
        "[Route(name='chitchat', utterances=['how are things going?', \"how's the weather today?\", 'the weather is horrendous', 'lovely weather today', \"let's go to the chippy\"], description=None, function_schemas=None, llm=None, score_threshold=None, metadata={})]"
       ]
      },
-     "execution_count": 39,
+     "execution_count": 25,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -675,15 +677,14 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 41,
+   "execution_count": 26,
    "metadata": {},
    "outputs": [
     {
      "name": "stderr",
      "output_type": "stream",
      "text": [
-      "2025-01-29 23:27:42 - httpx - INFO - _client.py:1729 - _send_single_request() - HTTP Request: POST https://api.openai.com/v1/embeddings \"HTTP/1.1 200 OK\"\n",
-      "2025-01-29 23:27:42 - semantic_router.utils.logger - ERROR - pinecone_local.py:796 - _async_query() - current host: http://localhost:5081\n"
+      "2025-02-03 15:42:01 - httpx - INFO - _client.py:1729 - _send_single_request() - HTTP Request: POST https://api.openai.com/v1/embeddings \"HTTP/1.1 200 OK\"\n"
      ]
     },
     {
@@ -692,7 +693,7 @@
        "RouteChoice(name='chitchat', function_call=None, similarity_score=None)"
       ]
      },
-     "execution_count": 41,
+     "execution_count": 26,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -703,7 +704,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 42,
+   "execution_count": 27,
    "metadata": {},
    "outputs": [
     {
@@ -713,11 +714,12 @@
        "   'dimension': 1536,\n",
        "   'metric': 'dotproduct',\n",
        "   'host': 'localhost:5081',\n",
+       "   'deletion_protection': 'disabled',\n",
        "   'spec': {'serverless': {'cloud': 'aws', 'region': 'us-east-1'}},\n",
        "   'status': {'ready': True, 'state': 'Ready'}}]}"
       ]
      },
-     "execution_count": 42,
+     "execution_count": 27,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -763,7 +765,7 @@
    "name": "python",
    "nbconvert_exporter": "python",
    "pygments_lexer": "ipython3",
-   "version": "3.12.8"
+   "version": "3.12.4"
   }
  },
  "nbformat": 4,
diff --git a/pinecone-local.ipynb b/pinecone-local.ipynb
deleted file mode 100644
index 5cfc54093e1c98c271a01a4c46d02be207dfd53a..0000000000000000000000000000000000000000
--- a/pinecone-local.ipynb
+++ /dev/null
@@ -1,773 +0,0 @@
-{
- "cells": [
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "# Using PineconeLocalIndex for Routes\n",
-    "\n",
-    "Pinecone Local is an in-memory Pinecone Database emulator available as a Docker image.\n",
-    "\n",
-    "It's useful for running tests using the Pinecone local server. Your data will not leave your system, which is also helpful if you want to do testing locally before committing to a Pinecone account.\n",
-    "\n",
-    "## Limitations\n",
-    "Pinecone Local has the following limitations:\n",
-    "\n",
-    "- Pinecone Local is available only as a Docker image.\n",
-    "- Pinecone Local is an in-memory emulator and is not suitable for production. Records loaded into Pinecone Local do not persist after it is stopped.\n",
-    "- Pinecone Local does not authenticate client requests. API keys are ignored.\n",
-    "- Max number of records per index: 100,000.\n",
-    "\n",
-    "## Getting Started\n",
-    "Make sure [Docker](https://docs.docker.com/get-docker/) is installed and running on your local machine.\n",
-    "\n",
-    "### Download the latest pinecone-local Docker image:\n",
-    "\n",
-    "\n",
-    "Download the latest pinecone-local Docker image:\n",
-    "\n",
-    "```bash\n",
-    "docker pull ghcr.io/pinecone-io/pinecone-local:latest\n",
-    "```\n",
-    "\n",
-    "### Start Pinecone Local:\n",
-    "\n",
-    "```bash\n",
-    "docker run -d \\\n",
-    "--name pinecone-local \\\n",
-    "-e PORT=5080 \\\n",
-    "-e PINECONE_HOST=localhost \\\n",
-    "-p 5080-6000:5080-6000 \\\n",
-    "--platform linux/amd64 \\\n",
-    "ghcr.io/pinecone-io/pinecone-local:latest\n",
-    "```\n",
-    "\n"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 16,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "!pip install -qU \"semantic-router[pinecone]==0.0.22\""
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 1,
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stderr",
-     "output_type": "stream",
-     "text": [
-      "c:\\Users\\awesome\\anaconda3\\envs\\py12\\Lib\\site-packages\\tqdm\\auto.py:21: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html\n",
-      "  from .autonotebook import tqdm as notebook_tqdm\n"
-     ]
-    }
-   ],
-   "source": [
-    "from semantic_router import Route\n",
-    "\n",
-    "# we could use this as a guide for our chatbot to avoid political conversations\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\" \"don't you just hate the president\",\n",
-    "        \"they're going to destroy this country!\",\n",
-    "        \"they will save the country!\",\n",
-    "    ],\n",
-    ")\n",
-    "\n",
-    "# this could be used as an indicator to our chatbot to switch to a more\n",
-    "# conversational prompt\n",
-    "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",
-    "# we place both of our decisions together into single list\n",
-    "routes = [politics, chitchat]"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 2,
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "[Route(name='politics', utterances=[\"isn't politics the best thing ever\", \"why don't you tell me about your political opinions\", \"don't you just love the presidentdon't you just hate the president\", \"they're going to destroy this country!\", 'they will save the country!'], description=None, function_schemas=None, llm=None, score_threshold=None, metadata={}),\n",
-       " Route(name='chitchat', utterances=[\"how's the weather today?\", 'how are things going?', 'lovely weather today', 'the weather is horrendous', \"let's go to the chippy\"], description=None, function_schemas=None, llm=None, score_threshold=None, metadata={})]"
-      ]
-     },
-     "execution_count": 2,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "routes"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 3,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "import os\n",
-    "from getpass import getpass\n",
-    "from semantic_router.encoders import OpenAIEncoder\n",
-    "\n",
-    "# get at platform.openai.com\n",
-    "os.environ[\"OPENAI_API_KEY\"] = os.environ.get(\"OPENAI_API_KEY\") or getpass(\n",
-    "    \"Enter OpenAI API key: \"\n",
-    ")\n",
-    "encoder = OpenAIEncoder(\n",
-    "    name=\"text-embedding-3-large\", score_threshold=0.5, dimensions=1536\n",
-    ")"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "For Pinecone Local, you can pass the API key as `pclocal`."
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 4,
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stderr",
-     "output_type": "stream",
-     "text": [
-      "2025-02-03 15:40:01 - semantic_router.utils.logger - WARNING - pinecone.py:169 - __init__() - Default region changed from us-west-2 to us-east-1 in v0.1.0.dev6\n",
-      "2025-02-03 15:40:01 - pinecone_plugin_interface.logging - INFO - discover_namespace_packages.py:12 - discover_subpackages() - Discovering subpackages in _NamespacePath(['c:\\\\Users\\\\awesome\\\\anaconda3\\\\envs\\\\py12\\\\Lib\\\\site-packages\\\\pinecone_plugins'])\n",
-      "2025-02-03 15:40:01 - pinecone_plugin_interface.logging - INFO - discover_plugins.py:9 - discover_plugins() - Looking for plugins in pinecone_plugins.inference\n",
-      "2025-02-03 15:40:01 - pinecone_plugin_interface.logging - INFO - installation.py:10 - install_plugins() - Installing plugin inference into Pinecone\n",
-      "2025-02-03 15:40:01 - semantic_router.utils.logger - ERROR - pinecone.py:233 - _init_index() - index_host exists-pinecone:localhost:5081\n",
-      "2025-02-03 15:40:01 - semantic_router.utils.logger - ERROR - pinecone.py:234 - _init_index() - base_url exists-pinecone:http://localhost:5080\n",
-      "2025-02-03 15:40:01 - semantic_router.utils.logger - ERROR - pinecone.py:251 - _init_index() - index_host exists:http://localhost:5081\n",
-      "2025-02-03 15:40:01 - semantic_router.utils.logger - ERROR - pinecone.py:252 - _init_index() - index exists:<pinecone.data.index.Index object at 0x000002C6C9DC3200>\n"
-     ]
-    }
-   ],
-   "source": [
-    "import os\n",
-    "from semantic_router.index.pinecone import PineconeIndex\n",
-    "\n",
-    "os.environ[\"PINECONE_API_KEY\"] = os.environ.get(\"PINECONE_API_KEY\") or getpass(\n",
-    "    \"Enter Pinecone API key: \"\n",
-    ")\n",
-    "\n",
-    "# Pass the pinecone local hosted url as base url\n",
-    "# os.environ[\"PINECONE_API_BASE_URL\"] = \"https://api.pinecone.io\"\n",
-    "os.environ[\"PINECONE_API_BASE_URL\"] = \"http://localhost:5080\"\n",
-    "\n",
-    "index = PineconeIndex(\n",
-    "    index_name=\"route-test\", dimensions=1536, base_url=\"http://localhost:5080\"\n",
-    ")"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 8,
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stderr",
-     "output_type": "stream",
-     "text": [
-      "2025-02-03 15:41:01 - semantic_router.utils.logger - ERROR - pinecone.py:233 - _init_index() - index_host exists-pinecone:localhost:5081\n",
-      "2025-02-03 15:41:01 - semantic_router.utils.logger - ERROR - pinecone.py:234 - _init_index() - base_url exists-pinecone:http://localhost:5080\n",
-      "2025-02-03 15:41:01 - semantic_router.utils.logger - ERROR - pinecone.py:251 - _init_index() - index_host exists:http://localhost:5081\n",
-      "2025-02-03 15:41:01 - semantic_router.utils.logger - ERROR - pinecone.py:252 - _init_index() - index exists:<pinecone.data.index.Index object at 0x000002C6CAA8FB90>\n"
-     ]
-    }
-   ],
-   "source": [
-    "from semantic_router.routers import SemanticRouter\n",
-    "\n",
-    "router = SemanticRouter(\n",
-    "    encoder=encoder,\n",
-    "    routes=routes,\n",
-    "    index=index,\n",
-    "    auto_sync=\"local\",\n",
-    ")"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "We can check our route layer and index information."
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 9,
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "'http://localhost:5081'"
-      ]
-     },
-     "execution_count": 9,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "index.index_host"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 10,
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "'http://localhost:5081'"
-      ]
-     },
-     "execution_count": 10,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "router.index.index_host"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 11,
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "{'indexes': [{'deletion_protection': 'disabled',\n",
-       "              'dimension': 1536,\n",
-       "              'host': 'localhost:5081',\n",
-       "              'metric': 'dotproduct',\n",
-       "              'name': 'route-test',\n",
-       "              'spec': {'serverless': {'cloud': 'aws', 'region': 'us-east-1'}},\n",
-       "              'status': {'ready': True, 'state': 'Ready'}}]}"
-      ]
-     },
-     "execution_count": 11,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "router.index.client.list_indexes()"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 12,
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "True"
-      ]
-     },
-     "execution_count": 12,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "router.index.is_ready()"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 13,
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "True"
-      ]
-     },
-     "execution_count": 13,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "router.is_synced()"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 14,
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "['  chitchat: how are things going?',\n",
-       " \"  chitchat: how's the weather today?\",\n",
-       " \"  chitchat: let's go to the chippy\",\n",
-       " '  chitchat: lovely weather today',\n",
-       " '  chitchat: the weather is horrendous',\n",
-       " \"  politics: don't you just love the presidentdon't you just hate the president\",\n",
-       " \"  politics: isn't politics the best thing ever\",\n",
-       " '  politics: they will save the country!',\n",
-       " \"  politics: they're going to destroy this country!\",\n",
-       " \"  politics: why don't you tell me about your political opinions\"]"
-      ]
-     },
-     "execution_count": 14,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "router.get_utterance_diff()"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 15,
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stderr",
-     "output_type": "stream",
-     "text": [
-      "2025-02-03 15:41:08 - httpx - INFO - _client.py:1013 - _send_single_request() - HTTP Request: POST https://api.openai.com/v1/embeddings \"HTTP/1.1 200 OK\"\n",
-      "2025-02-03 15:41:08 - semantic_router.utils.logger - ERROR - pinecone.py:575 - query() - retrying query with vector as str\n"
-     ]
-    },
-    {
-     "data": {
-      "text/plain": [
-       "RouteChoice(name='politics', function_call=None, similarity_score=None)"
-      ]
-     },
-     "execution_count": 15,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "router(\"don't you love politics?\")"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 17,
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "['politics', 'chitchat']"
-      ]
-     },
-     "execution_count": 17,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "router.list_route_names()"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 18,
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stderr",
-     "output_type": "stream",
-     "text": [
-      "2025-02-03 15:41:17 - httpx - INFO - _client.py:1013 - _send_single_request() - HTTP Request: POST https://api.openai.com/v1/embeddings \"HTTP/1.1 200 OK\"\n",
-      "2025-02-03 15:41:17 - semantic_router.utils.logger - ERROR - pinecone.py:575 - query() - retrying query with vector as str\n"
-     ]
-    },
-    {
-     "data": {
-      "text/plain": [
-       "RouteChoice(name='chitchat', function_call=None, similarity_score=None)"
-      ]
-     },
-     "execution_count": 18,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "router(\"how are things going?\")"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 19,
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "10"
-      ]
-     },
-     "execution_count": 19,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "len(router.index)"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "We can also view all of the records for a given route:"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 20,
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "['politics#64069085d9d6e98e5a80915f69fabe82bac6c742f801bc305c5001dce88f0d19',\n",
-       " 'politics#af8b76111f260cf44fb34f04fcf82927dcbe08e8f47c30f4d571379c1512fac8',\n",
-       " 'politics#d1bb40236c3d95b9c695bfa86b314b6da4eb87e136699563fccae47fccea23e2',\n",
-       " 'politics#ed0f3dd7bd5dea12e55b1953bcd2c562a5ab19f501f6d5ff8c8927652c3904b8',\n",
-       " 'politics#fc6d15f9e6075e6de82b3fbef6722b64353e4eadc8d663b7312a4ed60c43e6f6']"
-      ]
-     },
-     "execution_count": 20,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "router.index._get_route_ids(route_name=\"politics\")"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "And query:"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 21,
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stderr",
-     "output_type": "stream",
-     "text": [
-      "2025-02-03 15:41:25 - httpx - INFO - _client.py:1013 - _send_single_request() - HTTP Request: POST https://api.openai.com/v1/embeddings \"HTTP/1.1 200 OK\"\n",
-      "2025-02-03 15:41:25 - semantic_router.utils.logger - ERROR - pinecone.py:575 - query() - retrying query with vector as str\n"
-     ]
-    },
-    {
-     "data": {
-      "text/plain": [
-       "'politics'"
-      ]
-     },
-     "execution_count": 21,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "router(\"don't you love politics?\").name"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 22,
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stderr",
-     "output_type": "stream",
-     "text": [
-      "2025-02-03 15:19:14 - httpx - INFO - _client.py:1013 - _send_single_request() - HTTP Request: POST https://api.openai.com/v1/embeddings \"HTTP/1.1 200 OK\"\n",
-      "2025-02-03 15:19:14 - semantic_router.utils.logger - ERROR - pinecone.py:572 - query() - retrying query with vector as str\n"
-     ]
-    },
-    {
-     "data": {
-      "text/plain": [
-       "'chitchat'"
-      ]
-     },
-     "execution_count": 22,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "router(\"how's the weather today?\").name"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 22,
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stderr",
-     "output_type": "stream",
-     "text": [
-      "2025-02-03 15:41:32 - httpx - INFO - _client.py:1013 - _send_single_request() - HTTP Request: POST https://api.openai.com/v1/embeddings \"HTTP/1.1 200 OK\"\n",
-      "2025-02-03 15:41:32 - semantic_router.utils.logger - ERROR - pinecone.py:575 - query() - retrying query with vector as str\n"
-     ]
-    }
-   ],
-   "source": [
-    "router(\"I'm interested in learning about llama 2\").name"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "We can delete or update routes."
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 24,
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "10"
-      ]
-     },
-     "execution_count": 24,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "len(router.index)"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "## Deleting a Route from the Semantic Router\n",
-    "In this section, we demonstrate how to delete a specific route from the `SemanticRouter` instance. This is useful when you want to remove a route that is no longer needed or to update the routing logic dynamically.\n"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 23,
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stderr",
-     "output_type": "stream",
-     "text": [
-      "2025-02-03 15:41:39 - semantic_router.utils.logger - WARNING - pinecone.py:611 - _read_config() - Configuration for sr_lock parameter not found in index.\n",
-      "2025-02-03 15:41:39 - semantic_router.utils.logger - INFO - pinecone.py:477 - delete() - index is not None, deleting...\n",
-      "2025-02-03 15:41:39 - semantic_router.utils.logger - INFO - pinecone.py:491 - delete() - Deleted 5 vectors from index route-test.\n"
-     ]
-    },
-    {
-     "data": {
-      "text/plain": [
-       "5"
-      ]
-     },
-     "execution_count": 23,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "import time\n",
-    "\n",
-    "router.delete(route_name=\"politics\")\n",
-    "time.sleep(1)\n",
-    "len(router.index)"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 24,
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stderr",
-     "output_type": "stream",
-     "text": [
-      "2025-02-03 15:41:49 - httpx - INFO - _client.py:1013 - _send_single_request() - HTTP Request: POST https://api.openai.com/v1/embeddings \"HTTP/1.1 200 OK\"\n",
-      "2025-02-03 15:41:49 - semantic_router.utils.logger - ERROR - pinecone.py:575 - query() - retrying query with vector as str\n"
-     ]
-    }
-   ],
-   "source": [
-    "router(\"don't you love politics??\").name"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 25,
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "[Route(name='chitchat', utterances=['how are things going?', \"how's the weather today?\", 'the weather is horrendous', 'lovely weather today', \"let's go to the chippy\"], description=None, function_schemas=None, llm=None, score_threshold=None, metadata={})]"
-      ]
-     },
-     "execution_count": 25,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "router.index.get_routes()"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "## Asynchronous Route Query with Semantic Router\n",
-    "\n",
-    "In this section, we explore how to perform an asynchronous query using the `SemanticRouter`. This approach is beneficial when you want to handle multiple queries concurrently without blocking the execution of your program."
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 26,
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stderr",
-     "output_type": "stream",
-     "text": [
-      "2025-02-03 15:42:01 - httpx - INFO - _client.py:1729 - _send_single_request() - HTTP Request: POST https://api.openai.com/v1/embeddings \"HTTP/1.1 200 OK\"\n"
-     ]
-    },
-    {
-     "data": {
-      "text/plain": [
-       "RouteChoice(name='chitchat', function_call=None, similarity_score=None)"
-      ]
-     },
-     "execution_count": 26,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "await router.acall(\"how are things going?\")"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 27,
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "{'indexes': [{'name': 'route-test',\n",
-       "   'dimension': 1536,\n",
-       "   'metric': 'dotproduct',\n",
-       "   'host': 'localhost:5081',\n",
-       "   'deletion_protection': 'disabled',\n",
-       "   'spec': {'serverless': {'cloud': 'aws', 'region': 'us-east-1'}},\n",
-       "   'status': {'ready': True, 'state': 'Ready'}}]}"
-      ]
-     },
-     "execution_count": 27,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "await router.index._async_list_indexes()"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "### Stop and remove Pinecone Local\n",
-    "\n",
-    "To stop and remove the resources for Pinecone Local, run the following command:\n",
-    "\n",
-    "```bash\n",
-    "docker compose down\n",
-    "docker stop pinecone-local\n",
-    "docker rm pinecone-local\n",
-    "```"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": []
-  }
- ],
- "metadata": {
-  "kernelspec": {
-   "display_name": "py12",
-   "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.4"
-  }
- },
- "nbformat": 4,
- "nbformat_minor": 2
-}
diff --git a/semantic_router/index/pinecone.py b/semantic_router/index/pinecone.py
index 49538c13f957d2746b664f22b4b418f5cb1d0b7b..7241328e0899a308aa85de67f50bbcca4e3eba04 100644
--- a/semantic_router/index/pinecone.py
+++ b/semantic_router/index/pinecone.py
@@ -137,7 +137,7 @@ class PineconeIndex(BaseIndex):
         region: str = "us-east-1",
         host: str = "",
         namespace: Optional[str] = "",
-        base_url: Optional[str] = "",
+        base_url: Optional[str] = "https://api.pinecone.io",
         init_async_index: bool = False,
     ):
         super().__init__()
@@ -151,7 +151,9 @@ class PineconeIndex(BaseIndex):
             "User-Agent": "source_tag=semanticrouter",
         }
 
-        self.base_url = base_url or os.getenv("PINECONE_API_BASE_URL")
+        if base_url is not None or os.getenv("PINECONE_API_BASE_URL"):
+            logger.info("Using pinecone remote API.")
+            self.base_url = base_url or os.getenv("PINECONE_API_BASE_URL")
 
         if self.base_url and "api.pinecone.io" in self.base_url:
             self.headers["X-Pinecone-API-Version"] = "2024-07"