Skip to content

Incompatibility: Annlite=0.5.10 and DocArray=0.21.1 #231

@HarveyXia2003

Description

@HarveyXia2003

Environment

New and clean python environment for testing
Python 3.12.11
annlite 0.5.10
docarray 0.21.1
numpy 2.3.1

Error Message

Traceback (most recent call last):
  File "d:\VSCProjects\annlite_test\annlite_test.py", line 28, in <module>
    results = ann.search(query)
              ^^^^^^^^^^^^^^^^^
  File "D:\conda_envs\env_annlite_test\Lib\site-packages\annlite\index.py", line 354, in search
    match_dists, match_docs = self.search_by_vectors(
                              ^^^^^^^^^^^^^^^^^^^^^^^
  File "D:\conda_envs\env_annlite_test\Lib\site-packages\annlite\index.py", line 379, in search_by_vectors
    match_dists, match_docs = self.search_cells(
                              ^^^^^^^^^^^^^^^^^^
  File "D:\conda_envs\env_annlite_test\Lib\site-packages\annlite\container.py", line 229, in search_cells
    doc = self.doc_store(cell_id).get([doc_id])[0]
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "D:\conda_envs\env_annlite_test\Lib\site-packages\annlite\storage\kv.py", line 90, in get
    for doc_bytes in self._db[[k.encode() for k in doc_ids]]:
                               ^^^^^^^^
AttributeError: 'NoneType' object has no attribute 'encode'

Code (the Quick Start)

from annlite import AnnLite
from docarray import DocumentArray
import numpy as np
import os
import shutil

INDEX_PATH = '/tmp/annlite_test'
DIM = 128

# Cleanup old index
if os.path.exists(INDEX_PATH):
    shutil.rmtree(INDEX_PATH)

# 1. Initialize
ann = AnnLite(DIM, data_path=INDEX_PATH,metric='cosine')

# 2. Write 10 documents
docs = DocumentArray.empty(10)
docs.embeddings = np.random.random([10, 128]).astype(np.float32)
ann.index(docs)

# 3. Construct queries
query = DocumentArray.empty(2)
query.embeddings = np.random.random([2, 128]).astype(np.float32)

# 4. Search
# ===========
# Error occurred here in the original code
result = ann.search(query)
# ===========

for q in query:
    print(f'Query {q.id}')
    for k, m in enumerate(q.matches):
        print(f'{k}: {m.id} {m.scores["cosine"]}')

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions