github.com/weaviate/weaviate@v1.24.6/modules/text2vec-jinaai/vectorizer/objects.go (about) 1 // _ _ 2 // __ _____ __ ___ ___ __ _| |_ ___ 3 // \ \ /\ / / _ \/ _` \ \ / / |/ _` | __/ _ \ 4 // \ V V / __/ (_| |\ V /| | (_| | || __/ 5 // \_/\_/ \___|\__,_| \_/ |_|\__,_|\__\___| 6 // 7 // Copyright © 2016 - 2024 Weaviate B.V. All rights reserved. 8 // 9 // CONTACT: hello@weaviate.io 10 // 11 12 package vectorizer 13 14 import ( 15 "context" 16 17 "github.com/weaviate/weaviate/entities/models" 18 "github.com/weaviate/weaviate/entities/moduletools" 19 "github.com/weaviate/weaviate/modules/text2vec-jinaai/ent" 20 objectsvectorizer "github.com/weaviate/weaviate/usecases/modulecomponents/vectorizer" 21 libvectorizer "github.com/weaviate/weaviate/usecases/vectorizer" 22 ) 23 24 type Vectorizer struct { 25 client Client 26 objectVectorizer *objectsvectorizer.ObjectVectorizer 27 } 28 29 func New(client Client) *Vectorizer { 30 return &Vectorizer{ 31 client: client, 32 objectVectorizer: objectsvectorizer.New(), 33 } 34 } 35 36 type Client interface { 37 Vectorize(ctx context.Context, input string, 38 config ent.VectorizationConfig) (*ent.VectorizationResult, error) 39 VectorizeQuery(ctx context.Context, input []string, 40 config ent.VectorizationConfig) (*ent.VectorizationResult, error) 41 } 42 43 // IndexCheck returns whether a property of a class should be indexed 44 type ClassSettings interface { 45 PropertyIndexed(property string) bool 46 VectorizePropertyName(propertyName string) bool 47 VectorizeClassName() bool 48 Model() string 49 BaseURL() string 50 } 51 52 func (v *Vectorizer) Object(ctx context.Context, object *models.Object, 53 comp moduletools.VectorizablePropsComparator, cfg moduletools.ClassConfig, 54 ) ([]float32, models.AdditionalProperties, error) { 55 vec, err := v.object(ctx, object.Class, comp, cfg) 56 return vec, nil, err 57 } 58 59 func (v *Vectorizer) object(ctx context.Context, className string, 60 comp moduletools.VectorizablePropsComparator, cfg moduletools.ClassConfig, 61 ) ([]float32, error) { 62 text, vector := v.objectVectorizer.TextsOrVector(ctx, className, comp, NewClassSettings(cfg), cfg.TargetVector()) 63 if vector != nil { 64 // dont' re-vectorize 65 return vector, nil 66 } 67 // vectorize text 68 icheck := NewClassSettings(cfg) 69 res, err := v.client.Vectorize(ctx, text, ent.VectorizationConfig{ 70 Model: icheck.Model(), 71 BaseURL: icheck.BaseURL(), 72 }) 73 if err != nil { 74 return nil, err 75 } 76 77 if len(res.Vector) > 1 { 78 return libvectorizer.CombineVectors(res.Vector), nil 79 } 80 return res.Vector[0], nil 81 }