github.com/weaviate/weaviate@v1.24.6/modules/text2vec-openai/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-openai/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 Type() string 50 ModelVersion() string 51 ResourceName() string 52 DeploymentID() string 53 BaseURL() string 54 IsAzure() bool 55 } 56 57 func (v *Vectorizer) Object(ctx context.Context, object *models.Object, 58 comp moduletools.VectorizablePropsComparator, cfg moduletools.ClassConfig, 59 ) ([]float32, models.AdditionalProperties, error) { 60 vec, err := v.object(ctx, object.Class, comp, cfg) 61 return vec, nil, err 62 } 63 64 func (v *Vectorizer) object(ctx context.Context, className string, 65 comp moduletools.VectorizablePropsComparator, cfg moduletools.ClassConfig, 66 ) ([]float32, error) { 67 text, vector := v.objectVectorizer.TextsOrVector(ctx, className, comp, NewClassSettings(cfg), cfg.TargetVector()) 68 if vector != nil { 69 // dont' re-vectorize 70 return vector, nil 71 } 72 // vectorize text 73 res, err := v.client.Vectorize(ctx, text, v.getVectorizationConfig(cfg)) 74 if err != nil { 75 return nil, err 76 } 77 78 if len(res.Vector) > 1 { 79 return libvectorizer.CombineVectors(res.Vector), nil 80 } 81 return res.Vector[0], nil 82 } 83 84 func (v *Vectorizer) getVectorizationConfig(cfg moduletools.ClassConfig) ent.VectorizationConfig { 85 settings := NewClassSettings(cfg) 86 return ent.VectorizationConfig{ 87 Type: settings.Type(), 88 Model: settings.Model(), 89 ModelVersion: settings.ModelVersion(), 90 ResourceName: settings.ResourceName(), 91 DeploymentID: settings.DeploymentID(), 92 BaseURL: settings.BaseURL(), 93 IsAzure: settings.IsAzure(), 94 Dimensions: settings.Dimensions(), 95 } 96 }