Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

[Bug] Problema ao carregar ou criar coleção no chronadb

Ao executar o código:

import chromadb

db = chromadb.PersistentClient(path='./chroma_db')
chroma_client = db

collection_name = 'documentos_serenatto'

try:
  chroma_collection = chroma_client.get_or_create_collection(
      name = collection_name,
      embedding_function = embed_model_chroma
  )

except Exception as e:
  print(f'Erro ao carregar ou criar coleção: {e}')

retornou o erro:

Erro ao carregar ou criar coleção: 'ChromaEmbeddingWrapper' object has no attribute 'name'

o código da classe ChromaEmbeddingWrapper:

class ChromaEmbeddingWrapper:
  def __init__(self, model_name): 
      self.model = HuggingFaceEmbedding(model_name=model_name)

  def __call__(self, input): 
      return self.model.embed(input)

Estou usando Colab e usei todos os códigos padrão fornecidos na documentação da aula. Alguém teve o mesmo problema ou sabe como resolver?

5 respostas

Olá, Cristiano, como vai?

Para entender melhor o que está acontecendo, você pode compartilhar o link do seu notebook no Google Colab? Assim conseguimos analisar o código completo no contexto em que está sendo executado.

Fico no aguardo e a disposição :)

Tudo certo e contigo?

Segue o link do notebook utilizado.

https://colab.research.google.com/drive/1nvPQL5SZxwoqgNQL0JN1CskISElFyxPY?usp=sharing

solução!

Com as atualizações das bibliotecas, agora é necessário que, para combatibilizar os embeddings do Hugging Face com o Chroma DB, o wrapper deve também adicionar a propriedade name. Assim, a classe ChromaEmbeddingWrapper que anteriormente era:

class ChromaEmbeddingWrapper:
    def __init__(self, model_name): 
        self.model = HuggingFaceEmbedding(model_name=model_name)

    def __call__(self, input): 
        return self.model.embed(input)

deve ser criada como:

class ChromaEmbeddingWrapper:

    # inicialização recebe o nome do modelo
    def __init__(self, model_name): 
        self.model = HuggingFaceEmbedding(model_name=model_name)
        name = model_name  # armazena o nome do modelo informado

    def __call__(self, input): 
        return self.model.embed(input)

    def name(self):
        # propriedade 'name' adicionada ao Wrapper
        # para não gerar erro: "AttributeError: 'ChromaEmbeddingsWrapper' object has no attribute 'name'""
        return "ChromaE5Wrapper"   

Isto evita o erro ao carregar ou criar coleção: 'ChromaEmbeddingWrapper' object has no attribute 'name'

O código sugerido pelo Vicente Alves resolveu o problema. Obrigado pelo apoio.

Eu também fiquei com o mesmo problema, muito obrigada Vicente! <3