diff --git a/semantic_router/index/pinecone.py b/semantic_router/index/pinecone.py
index 75e0190291a0eaff347c635633d03b156a07fb6c..82ae008d4bccd165be242e87e2cfde7d5f084100 100644
--- a/semantic_router/index/pinecone.py
+++ b/semantic_router/index/pinecone.py
@@ -199,42 +199,43 @@ class PineconeIndex(BaseIndex):
             dimensions are not given (which will raise an error).
         :type force_create: bool, optional
         """
-        index_exists = self.index_name in self.client.list_indexes().names()
         dimensions_given = self.dimensions is not None
-        if dimensions_given and not index_exists:
-            # if the index doesn't exist and we have dimension value
-            # we create the index
-            self.client.create_index(
-                name=self.index_name,
-                dimension=self.dimensions,
-                metric=self.metric,
-                spec=self.ServerlessSpec(cloud=self.cloud, region=self.region),
-            )
-            # wait for index to be created
-            while not self.client.describe_index(self.index_name).status["ready"]:
-                time.sleep(1)
-            index = self.client.Index(self.index_name)
-            time.sleep(0.5)
-        elif index_exists:
-            # if the index exists we just return it
-            index = self.client.Index(self.index_name)
-            # grab the dimensions from the index
-            self.dimensions = index.describe_index_stats()["dimension"]
-        elif force_create and not dimensions_given:
-            raise ValueError(
-                "Cannot create an index without specifying the dimensions."
-            )
-        else:
-            # if the index doesn't exist and we don't have the dimensions
-            # we return None
-            logger.warning(
-                "Index could not be initialized. Init parameters: "
-                f"{self.index_name=}, {self.dimensions=}, {self.metric=}, "
-                f"{self.cloud=}, {self.region=}, {self.host=}, {self.namespace=}, "
-                f"{force_create=}"
-            )
-            index = None
-        if index is not None:
+        if self.index is None:
+            index_exists = self.index_name in self.client.list_indexes().names()
+            if dimensions_given and not index_exists:
+                # if the index doesn't exist and we have dimension value
+                # we create the index
+                self.client.create_index(
+                    name=self.index_name,
+                    dimension=self.dimensions,
+                    metric=self.metric,
+                    spec=self.ServerlessSpec(cloud=self.cloud, region=self.region),
+                )
+                # wait for index to be created
+                while not self.client.describe_index(self.index_name).status["ready"]:
+                    time.sleep(0.2)
+                index = self.client.Index(self.index_name)
+                time.sleep(0.2)
+            elif index_exists:
+                # if the index exists we just return it
+                index = self.client.Index(self.index_name)
+                # grab the dimensions from the index
+                self.dimensions = index.describe_index_stats()["dimension"]
+            elif force_create and not dimensions_given:
+                raise ValueError(
+                    "Cannot create an index without specifying the dimensions."
+                )
+            else:
+                # if the index doesn't exist and we don't have the dimensions
+                # we return None
+                logger.warning(
+                    "Index could not be initialized. Init parameters: "
+                    f"{self.index_name=}, {self.dimensions=}, {self.metric=}, "
+                    f"{self.cloud=}, {self.region=}, {self.host=}, {self.namespace=}, "
+                    f"{force_create=}"
+                )
+                index = None
+        if self.index is not None and self.host == "":
             self.host = self.client.describe_index(self.index_name)["host"]
         return index
 
diff --git a/semantic_router/routers/base.py b/semantic_router/routers/base.py
index c59ee1c4b0d7fee3518459b2b8d59552a67a10cb..9c19380a73fec706cd59232f2dd86de7614545c2 100644
--- a/semantic_router/routers/base.py
+++ b/semantic_router/routers/base.py
@@ -397,9 +397,10 @@ class BaseRouter(BaseModel):
             self.index.dimensions = dims
         # now init index
         if isinstance(self.index, PineconeIndex):
-            # no need to init index if already initialized
-            if self.index.index is None:
-                self.index.index = self.index._init_index(force_create=True)
+            # _init_index will not create index if already exists — it will also check
+            # for required attributes like self.index.host and self.index.dimensions and
+            # fetch them if not set
+            self.index.index = self.index._init_index(force_create=True)
         # run auto sync if active
         if self.auto_sync:
             local_utterances = self.to_config().to_utterances()