{"record":{"id":"3c6608dd5494a028","repo":"run-llama/llama_index","slug":"cannot-initialize-from-a-vector-store-that-does-no","errorCode":null,"errorMessage":"Cannot initialize from a vector store that does not store text.","messagePattern":"Cannot initialize from a vector store that does not store text\\.","errorType":"exception","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"llama-index-core/llama_index/core/indices/multi_modal/base.py","lineNumber":212,"sourceCode":"                retriever=self.as_retriever(**kwargs),\n                multi_modal_llm=llm,\n                **kwargs,\n            )\n\n        return super().as_chat_engine(chat_mode, llm, **kwargs)\n\n    @classmethod\n    def from_vector_store(\n        cls,\n        vector_store: BasePydanticVectorStore,\n        embed_model: Optional[EmbedType] = None,\n        # Image-related kwargs\n        image_vector_store: Optional[BasePydanticVectorStore] = None,\n        image_embed_model: EmbedType = \"clip\",\n        **kwargs: Any,\n    ) -> \"MultiModalVectorStoreIndex\":\n        if not vector_store.stores_text:\n            raise ValueError(\n                \"Cannot initialize from a vector store that does not store text.\"\n            )\n\n        storage_context = StorageContext.from_defaults(vector_store=vector_store)\n        return cls(\n            nodes=[],\n            storage_context=storage_context,\n            image_vector_store=image_vector_store,\n            image_embed_model=image_embed_model,\n            embed_model=(\n                resolve_embed_model(\n                    embed_model, callback_manager=kwargs.get(\"callback_manager\")\n                )\n                if embed_model\n                else Settings.embed_model\n            ),\n            **kwargs,\n        )","sourceCodeStart":194,"sourceCodeEnd":230,"githubUrl":"https://github.com/run-llama/llama_index/blob/afd0fef371831f9bda13e5af7167cf4e981278ab/llama-index-core/llama_index/core/indices/multi_modal/base.py#L194-L230","documentation":"MultiModalVectorStoreIndex.from_vector_store() reconstructs an index purely from an existing vector store, which requires the store to return the node text itself (stores_text=True). If the store only returns ids/embeddings (stores_text=False, e.g. many stores that rely on a separate docstore), there is no way to rebuild text and image nodes from it alone, so the constructor raises ValueError immediately.","triggerScenarios":"Passing a stores_text=False vector store (e.g. some docstore-backed integrations) to MultiModalVectorStoreIndex.from_vector_store(); also note the image store path: image_vector_store has its own stores_text requirement in the surrounding code.","commonSituations":"Reusing a VectorStoreIndex setup with a docstore-dependent store for multimodal from_vector_store; switching a working single-modal pipeline to MultiModalVectorStoreIndex while keeping the same store; stores whose stores_text flag differs by version.","solutions":["Use a vector store that keeps text (stores_text=True), e.g. most local or metadata-retaining stores.","Or build the multimodal index with nodes: MultiModalVectorStoreIndex(nodes=..., vector_store=..., image_vector_store=...) so text is ingested rather than reconstructed.","Check the flag before calling: assert vector_store.stores_text, and pick the construction method accordingly."],"exampleFix":"# before\nindex = MultiModalVectorStoreIndex.from_vector_store(vector_store=my_store)  # stores_text=False\n\n# after\nassert my_store.stores_text\nindex = MultiModalVectorStoreIndex.from_vector_store(vector_store=my_store)\n# or ingest nodes directly:\n# index = MultiModalVectorStoreIndex(nodes=nodes, vector_store=my_store)","handlingStrategy":"validation","validationCode":"assert vector_store.stores_text, (\n    \"from_vector_store requires a text-storing store; \"\n    \"build with nodes=... instead\"\n)\nindex = MultiModalVectorStoreIndex.from_vector_store(vector_store=vector_store)","typeGuard":"def usable_for_mm_from_vector_store(store) -> bool:\n    return bool(getattr(store, \"stores_text\", False))","tryCatchPattern":"try:\n    index = MultiModalVectorStoreIndex.from_vector_store(vector_store=store)\nexcept ValueError as e:\n    if \"does not store text\" in str(e):\n        index = MultiModalVectorStoreIndex(nodes=nodes, vector_store=store)\n    else:\n        raise","preventionTips":["Check vector_store.stores_text before choosing from_vector_store vs node ingestion.","Keep the same requirement in mind for image_vector_store in multimodal setups.","Encapsulate index construction so the right path is chosen per store capability."],"tags":["llama-index","multimodal","vector-store","validation","configuration"],"backgroundTag":null,"analyzedSha":"afd0fef371831f9bda13e5af7167cf4e981278ab","analyzedAt":"2026-08-15T05:42:58.429Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}