github.com/weaviate/weaviate@v1.24.6/modules/text2vec-contextionary/additional/provider.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 additional 13 14 import ( 15 "context" 16 17 "github.com/weaviate/weaviate/entities/moduletools" 18 19 "github.com/tailor-inc/graphql/language/ast" 20 "github.com/weaviate/weaviate/entities/modulecapabilities" 21 "github.com/weaviate/weaviate/entities/search" 22 ) 23 24 type AdditionalProperty interface { 25 AdditionalPropertyFn(ctx context.Context, 26 in []search.Result, params interface{}, limit *int, 27 argumentModuleParams map[string]interface{}, cfg moduletools.ClassConfig) ([]search.Result, error) 28 ExtractAdditionalFn(param []*ast.Argument) interface{} 29 AdditionalPropertyDefaultValue() interface{} 30 } 31 32 type GraphQLAdditionalArgumentsProvider struct { 33 nnExtender AdditionalProperty 34 projector AdditionalProperty 35 sempathBuilder AdditionalProperty 36 interpretation AdditionalProperty 37 } 38 39 func New(nnExtender, projector, sempath, interpretation AdditionalProperty) *GraphQLAdditionalArgumentsProvider { 40 return &GraphQLAdditionalArgumentsProvider{nnExtender, projector, sempath, interpretation} 41 } 42 43 func (p *GraphQLAdditionalArgumentsProvider) AdditionalProperties() map[string]modulecapabilities.AdditionalProperty { 44 additionalProperties := map[string]modulecapabilities.AdditionalProperty{} 45 additionalProperties["nearestNeighbors"] = p.getNearestNeighbors() 46 additionalProperties["featureProjection"] = p.getFeatureProjection() 47 additionalProperties["semanticPath"] = p.getSemanticPath() 48 additionalProperties["interpretation"] = p.getInterpretation() 49 return additionalProperties 50 } 51 52 func (p *GraphQLAdditionalArgumentsProvider) getNearestNeighbors() modulecapabilities.AdditionalProperty { 53 return modulecapabilities.AdditionalProperty{ 54 RestNames: []string{ 55 "nearestNeighbors", 56 "nearestneighbors", 57 "nearest-neighbors", 58 "nearest_neighbors", 59 }, 60 DefaultValue: p.nnExtender.AdditionalPropertyDefaultValue(), 61 GraphQLNames: []string{"nearestNeighbors"}, 62 GraphQLFieldFunction: additionalNearestNeighborsField, 63 GraphQLExtractFunction: p.nnExtender.ExtractAdditionalFn, 64 SearchFunctions: modulecapabilities.AdditionalSearch{ 65 ObjectGet: p.nnExtender.AdditionalPropertyFn, 66 ObjectList: p.nnExtender.AdditionalPropertyFn, 67 ExploreGet: p.nnExtender.AdditionalPropertyFn, 68 ExploreList: p.nnExtender.AdditionalPropertyFn, 69 }, 70 } 71 } 72 73 func (p *GraphQLAdditionalArgumentsProvider) getFeatureProjection() modulecapabilities.AdditionalProperty { 74 return modulecapabilities.AdditionalProperty{ 75 RestNames: []string{ 76 "featureProjection", 77 "featureprojection", 78 "feature-projection", 79 "feature_projection", 80 }, 81 DefaultValue: p.projector.AdditionalPropertyDefaultValue(), 82 GraphQLNames: []string{"featureProjection"}, 83 GraphQLFieldFunction: additionalFeatureProjectionField, 84 GraphQLExtractFunction: p.projector.ExtractAdditionalFn, 85 SearchFunctions: modulecapabilities.AdditionalSearch{ 86 ObjectList: p.projector.AdditionalPropertyFn, 87 ExploreGet: p.projector.AdditionalPropertyFn, 88 ExploreList: p.projector.AdditionalPropertyFn, 89 }, 90 } 91 } 92 93 func (p *GraphQLAdditionalArgumentsProvider) getSemanticPath() modulecapabilities.AdditionalProperty { 94 return modulecapabilities.AdditionalProperty{ 95 DefaultValue: p.sempathBuilder.AdditionalPropertyDefaultValue(), 96 GraphQLNames: []string{"semanticPath"}, 97 GraphQLFieldFunction: additionalSemanticPathField, 98 GraphQLExtractFunction: p.sempathBuilder.ExtractAdditionalFn, 99 SearchFunctions: modulecapabilities.AdditionalSearch{ 100 ExploreGet: p.sempathBuilder.AdditionalPropertyFn, 101 }, 102 } 103 } 104 105 func (p *GraphQLAdditionalArgumentsProvider) getInterpretation() modulecapabilities.AdditionalProperty { 106 return modulecapabilities.AdditionalProperty{ 107 RestNames: []string{ 108 "interpretation", 109 }, 110 DefaultValue: p.interpretation.AdditionalPropertyDefaultValue(), 111 GraphQLNames: []string{"interpretation"}, 112 GraphQLFieldFunction: additionalInterpretationField, 113 GraphQLExtractFunction: p.interpretation.ExtractAdditionalFn, 114 SearchFunctions: modulecapabilities.AdditionalSearch{ 115 ObjectGet: p.interpretation.AdditionalPropertyFn, 116 ObjectList: p.interpretation.AdditionalPropertyFn, 117 ExploreGet: p.interpretation.AdditionalPropertyFn, 118 ExploreList: p.interpretation.AdditionalPropertyFn, 119 }, 120 } 121 }