Skip to content

Cannot create HashModel containing a list to do knn #544

@GDegrove

Description

@GDegrove

We are currently trying to get Redis-om to work with redis-search for knn search on a HashModel.

Our model is the following:

class Document(HashModel):

    vector: float = Field(
        vector_options=VectorFieldOptions.flat(
            type=VectorFieldOptions.TYPE.FLOAT32,
            dimension=512,
            distance_metric=VectorFieldOptions.DISTANCE_METRIC.COSINE
        )
    )

When using the type float we can go into that line of code, that creates the correct vector type. However, a vector is actually NOT a float, so any creation of the model will fail.

Transforming the model to a valid model, we see that we need to use:

class Document(HashModel):

    vector: list[float] = Field(
        vector_options=VectorFieldOptions.flat(
            type=VectorFieldOptions.TYPE.FLOAT32,
            dimension=512,
            distance_metric=VectorFieldOptions.DISTANCE_METRIC.COSINE
        )
    )

That would allow us to create the correct VECTOR and use it. However, it seems that there's a check in __init__ that prevent any list to be a field in the HashModel

However, when creating the schema, there's a specific clause to check that the subscribed type, is supported if this is a list or a tuple that we are clearly in.

The question is:

How can we create a HashModel with vector list[float] to be able to create a knn_vector query?
Is it a bug where we need to skip the list and check that actually we support list and tuples in HashModel? Or should we use any other container to let us do the vector query?

Thanks already for the information!

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