github.com/weaviate/weaviate@v1.24.6/modules/text2vec-aws/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-aws/ent" 20 objectsvectorizer "github.com/weaviate/weaviate/usecases/modulecomponents/vectorizer" 21 ) 22 23 type Vectorizer struct { 24 client Client 25 objectVectorizer *objectsvectorizer.ObjectVectorizer 26 } 27 28 func New(client Client) *Vectorizer { 29 return &Vectorizer{ 30 client: client, 31 objectVectorizer: objectsvectorizer.New(), 32 } 33 } 34 35 type Client interface { 36 Vectorize(ctx context.Context, input []string, 37 config ent.VectorizationConfig) (*ent.VectorizationResult, error) 38 VectorizeQuery(ctx context.Context, input []string, 39 config ent.VectorizationConfig) (*ent.VectorizationResult, error) 40 } 41 42 // IndexCheck returns whether a property of a class should be indexed 43 type ClassSettings interface { 44 PropertyIndexed(property string) bool 45 VectorizePropertyName(propertyName string) bool 46 VectorizeClassName() bool 47 Service() string 48 Region() string 49 Model() string 50 Endpoint() string 51 TargetModel() string 52 TargetVariant() string 53 } 54 55 func (v *Vectorizer) Object(ctx context.Context, object *models.Object, 56 comp moduletools.VectorizablePropsComparator, cfg moduletools.ClassConfig, 57 ) ([]float32, models.AdditionalProperties, error) { 58 vec, err := v.object(ctx, object.Class, comp, cfg) 59 return vec, nil, err 60 } 61 62 func (v *Vectorizer) object(ctx context.Context, className string, 63 comp moduletools.VectorizablePropsComparator, cfg moduletools.ClassConfig, 64 ) ([]float32, error) { 65 text, vector := v.objectVectorizer.TextsOrVector(ctx, className, comp, NewClassSettings(cfg), cfg.TargetVector()) 66 67 if vector != nil { 68 // dont' re-vectorize 69 return vector, nil 70 } 71 // vectorize text 72 icheck := NewClassSettings(cfg) 73 res, err := v.client.Vectorize(ctx, []string{text}, ent.VectorizationConfig{ 74 Service: icheck.Service(), 75 Region: icheck.Region(), 76 Model: icheck.Model(), 77 Endpoint: icheck.Endpoint(), 78 TargetModel: icheck.TargetModel(), 79 TargetVariant: icheck.TargetVariant(), 80 }) 81 if err != nil { 82 return nil, err 83 } 84 85 return res.Vector, nil 86 }