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  }