5
respostas

Erro no embedding com o Hugging Face

Dá erro quando conecto no Chroma Db e não encontra o modelo intfloat/multilingual-e5-large

5 respostas

Se você está usando o Chroma com embeddings personalizados (ex: Hugging Face Transformers), o modelo precisa estar disponível localmente ou acessível via internet.

Soluções possíveis:

Baixar manualmente o modelo:

pip install transformers
from transformers import AutoTokenizer, AutoModel

model_name = "intfloat/multilingual-e5-large"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModel.from_pretrained(model_name)

Isso baixa e armazena o modelo no cache local de Hugging Face.

Verifique se há problemas de conexão ou permissão, especialmente se estiver rodando em ambiente restrito (e.g. offline, servidor corporativo, docker sem internet).

Localmente ele funciona

  1. Falta de acesso à internet no ambiente remoto: • O modelo precisa ser baixado da Hugging Face na primeira vez. • Se o ambiente está offline, ele não conseguirá fazer isso.

    1. O Hugging Face Token não está configurado (caso o modelo exija autenticação): • Alguns modelos exigem login ou token de acesso mesmo que sejam públicos.
    2. Problemas com permissões ou diretório de cache: • O Hugging Face armazena os modelos localmente (geralmente em ~/.cache/huggingface/transformers/). • Se esse diretório não estiver acessível ou estiver corrompido, pode falhar.
    3. Chroma não está configurado corretamente para usar o embedding model: • É possível que a configuração do Chroma para embeddings esteja diferente no ambiente remoto.

    verifica se esta logado em todos os ambientes e configurados corretamente

from copy import deepcopy
from chromadb.config import Settings
from langchain_chroma import Chroma
from typing_extensions import override
from langflow.base.vectorstores.model import LCVectorStoreComponent, check_cached_vector_store
from langflow.base.vectorstores.utils import chroma_collection_to_data
from langflow.io import BoolInput, DropdownInput, HandleInput, IntInput, StrInput
from langflow.schema import Data, DataFrame


class ChromaVectorStoreComponent(LCVectorStoreComponent):
    """Chroma Vector Store with search capabilities."""

    display_name: str = "Chroma DB"
    description: str = "Chroma Vector Store with search capabilities"
    name = "Chroma"
    icon = "Chroma"

    inputs = [
        StrInput(
            name="collection_name",
            display_name="Collection Name",
            value="langflow",
        ),
        StrInput(
            name="persist_directory",
            display_name="Persist Directory",
            advanced=True,
            info="Leave empty for in-memory mode (recommended for Hugging Face Spaces)",
        ),
        *LCVectorStoreComponent.inputs,
        HandleInput(name="embedding", display_name="Embedding", input_types=["Embeddings"]),
        BoolInput(
            name="allow_duplicates",
            display_name="Allow Duplicates",
            advanced=True,
            info="If false, will not add documents that are already in the Vector Store.",
        ),
        DropdownInput(
            name="search_type",
            display_name="Search Type",
            options=["Similarity", "MMR"],
            value="Similarity",
            advanced=True,
        ),
        IntInput(
            name="number_of_results",
            display_name="Number of Results",
            info="Number of results to return.",
            advanced=True,
            value=10,
        ),
        IntInput(
            name="limit",
            display_name="Limit",
            advanced=True,
            info="Limit the number of records to compare when Allow Duplicates is False.",
        ),
    ]

    @override
    @check_cached_vector_store
    def build_vector_store(self) -> Chroma:
        """Builds the Chroma object."""
        try:
            from chromadb import Client, PersistentClient
            from langchain_chroma import Chroma
        except ImportError as e:
            msg = "Could not import Chroma integration package. Please install it with `pip install langchain-chroma chromadb`."
            raise ImportError(msg) from e

        try:
            # Configuração simplificada
            if self.persist_directory:
                self.log("Warning: Persistence may not work properly in Hugging Face Spaces")
                persist_directory = self.resolve_path(self.persist_directory)
                client = PersistentClient(path=persist_directory)
            else:
                # Modo em memória (recomendado para Spaces)
                client = Client()

            chroma = Chroma(
                client=client,
                embedding_function=self.embedding,
                collection_name=self.collection_name,
            )

            self._add_documents_to_vector_store(chroma)
            self.status = chroma_collection_to_data(chroma.get(limit=self.limit))
            return chroma
            
        except Exception as e:
            self.log(f"Error building Chroma: {str(e)}")
            raise

    def _add_documents_to_vector_store(self, vector_store: "Chroma") -> None:
        """Adds documents to the Vector Store."""
        ingest_data: list | Data | DataFrame = self.ingest_data
        if not ingest_data:
            self.status = ""
            return

        # Convert DataFrame to Data if needed using parent's method
        ingest_data = self._prepare_ingest_data()

        stored_documents_without_id = []
        if self.allow_duplicates:
            stored_data = []
        else:
            stored_data = chroma_collection_to_data(vector_store.get(limit=self.limit))
            for value in deepcopy(stored_data):
                del value.id
                stored_documents_without_id.append(value)

        documents = []
        for _input in ingest_data or []:
            if isinstance(_input, Data):
                if _input not in stored_documents_without_id:
                    documents.append(_input.to_lc_document())
            else:
                msg = "Vector Store Inputs must be Data objects."
                raise TypeError(msg)

        if documents and self.embedding is not None:
            self.log(f"Adding {len(documents)} documents to the Vector Store.")
            vector_store.add_documents(documents)
        else:
            self.log("No documents to add to the Vector Store.")

Eu estava tentando configurar um servidor Chroma com host, portas e CORS, o que não é necessário para um uso básico no Hugging Face Spaces. O Hugging Face Spaces tem um sistema de arquivos efêmero, então tentar persistir dados localmente geralmente não funciona. Além disso, não havia tratamento adequado para casos onde a criação do cliente falha. Também observei muitas configurações avançadas que não são relevantes para um ambiente como o Spaces. O código para colocar no code do chorma DB esta logo acima. !o print de onde clicar para inserir o código](https://cdn1.gnarususercontent.com.br/1/883396/e998d5fa-8239-41f8-94bf-9fbcaa9698df.png)

![O ambiente de edição](https://cdn1.gnarususercontent.com.br/1/883396/49e30ee3-d29b-4f2c-84c0-95b5d6f84f4d.png)