redis / redis-om-python

Object mapping, and more, for Redis and Python
MIT License
1.12k stars 112 forks source link

Unable to declare a Vector-Field for a JsonModel #656

Open MarkusPorti opened 1 month ago

MarkusPorti commented 1 month ago

The Bug

I'm trying to declare a Field as a Vector-Field by setting the vector_options on the Field. Pydantic is then forcing me to annotate the field with a proper type. But with any possible type for a vector, I always get errors.

The one that I think should definitly work is list[float], but this results in AttributeError: type object 'float' has no attribute '__origin__'.

Example

class Group(JsonModel):
    articles: List[Article]
    tender_text: str = Field(index=False)
    tender_embedding: list[float] = Field(
        index=True,
        vector_options=VectorFieldOptions(
            algorithm=VectorFieldOptions.ALGORITHM.FLAT,
            type=VectorFieldOptions.TYPE.FLOAT32,
            dimension=3,
            distance_metric=VectorFieldOptions.DISTANCE_METRIC.COSINE
        ))

No Documentation for Vector-Fields?

There seems to be no documentation about this feature. I just found a merge-request which describes some features a bit, but there is no example, test or any documentation about this.

sethbuff commented 2 weeks ago

I'm running into the same thing. It looks like they want you to type it as tender_embedding: list[list[float]] but even with that, I'm having issues getting any reasonable results when searching.

sethbuff commented 2 weeks ago

@Pwuts or @chayim could one of you provide a working example of how to use the vector field? Or potentially just some tests that can be referenced?