diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2021-05-23 20:53:46 +0200 |
---|---|---|
committer | Henning Baldersheim <balder@yahoo-inc.com> | 2021-05-24 16:01:48 +0200 |
commit | 47cef11f9f606e69977b080ab43af91ce4cba975 (patch) | |
tree | 5dbcf30033d1b92f6ba32d0f0dd00183f5b47660 /config-model | |
parent | f63093f6519dbad54cf7293826100ce6b510880a (diff) |
Produce ranking-expressions config.
Diffstat (limited to 'config-model')
13 files changed, 180 insertions, 77 deletions
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/ImmutableSearch.java b/config-model/src/main/java/com/yahoo/searchdefinition/ImmutableSearch.java index 6ac73ad45a9..efd9ed5e88f 100644 --- a/config-model/src/main/java/com/yahoo/searchdefinition/ImmutableSearch.java +++ b/config-model/src/main/java/com/yahoo/searchdefinition/ImmutableSearch.java @@ -28,6 +28,7 @@ public interface ImmutableSearch { Reader getRankingExpression(String fileName); ApplicationPackage applicationPackage(); RankingConstants rankingConstants(); + RankExpressionFiles rankExpressionFiles(); OnnxModels onnxModels(); Stream<ImmutableSDField> allImportedFields(); diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/RankProfile.java b/config-model/src/main/java/com/yahoo/searchdefinition/RankProfile.java index 74a9ef25615..61fd2e3fb41 100644 --- a/config-model/src/main/java/com/yahoo/searchdefinition/RankProfile.java +++ b/config-model/src/main/java/com/yahoo/searchdefinition/RankProfile.java @@ -78,6 +78,8 @@ public class RankProfile implements Cloneable { /** The ranking expression to be used for second phase */ private RankingExpression secondPhaseRanking = null; + private Set<String> externalFileExpressions = new HashSet<>(); + /** Number of hits to be reranked in second phase, -1 means use default */ private int rerankCount = -1; @@ -163,6 +165,10 @@ public class RankProfile implements Cloneable { return search != null ? search.rankingConstants() : model.rankingConstants(); } + public RankExpressionFiles rankExpressionFiles() { + return search != null ? search.rankExpressionFiles() : model.rankExpressionFiles(); + } + public Map<String, OnnxModel> onnxModels() { return search != null ? search.onnxModels().asMap() : Collections.emptyMap(); } @@ -368,9 +374,41 @@ public class RankProfile implements Cloneable { this.firstPhaseRanking = rankingExpression; } + public String getFirstPhaseFile() { + String name = FIRST_PHASE; + if (externalFileExpressions.contains(name)) { + return rankExpressionFiles().get(name).getFileName(); + } + if ((firstPhaseRanking == null) && (getInherited() != null)) { + return getInherited().getFirstPhaseFile(); + } + return null; + } + + public String getSecondPhaseFile() { + String name = SECOND_PHASE; + if (externalFileExpressions.contains(name)) { + return rankExpressionFiles().get(name).getFileName(); + } + if ((secondPhaseRanking == null) && (getInherited() != null)) { + return getInherited().getSecondPhaseFile(); + } + return null; + } + + public String getExpressionFile(String name) { + if (externalFileExpressions.contains(name)) { + return rankExpressionFiles().get(name).getFileName(); + } + if (getInherited() != null) { + return getInherited().getExpressionFile(name); + } + return null; + } + public void setFirstPhaseRanking(String expression) { try { - this.firstPhaseRanking = parseRankingExpression("firstphase", expression); + this.firstPhaseRanking = parseRankingExpression(FIRST_PHASE, expression); } catch (ParseException e) { throw new IllegalArgumentException("Illegal first phase ranking function", e); @@ -663,18 +701,25 @@ public class RankProfile implements Cloneable { } } - private Reader openRankingExpressionReader(String expName, String expression) { - if ( ! expression.startsWith("file:")) return new StringReader(expression); - + private static String extractFileName(String expression) { String fileName = expression.substring("file:".length()).trim(); if ( ! fileName.endsWith(ApplicationPackage.RANKEXPRESSION_NAME_SUFFIX)) fileName = fileName + ApplicationPackage.RANKEXPRESSION_NAME_SUFFIX; + return fileName; + } + + private Reader openRankingExpressionReader(String expName, String expression) { + if ( ! expression.startsWith("file:")) return new StringReader(expression); + + String fileName = extractFileName(expression); File file = new File(fileName); - if ( ! (file.isAbsolute()) && file.getPath().contains("/")) // See ticket 4102122 + if ( ! file.isAbsolute() && file.getPath().contains("/")) // See ticket 4102122 throw new IllegalArgumentException("In " + getName() +", " + expName + ", ranking references file '" + file + "' in subdirectory, which is not supported."); + rankExpressionFiles().add(new RankExpressionFile(expName, fileName)); + externalFileExpressions.add(expName); return search.getRankingExpression(fileName); } diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/Search.java b/config-model/src/main/java/com/yahoo/searchdefinition/Search.java index 9b7434dccab..a90cc7c9450 100644 --- a/config-model/src/main/java/com/yahoo/searchdefinition/Search.java +++ b/config-model/src/main/java/com/yahoo/searchdefinition/Search.java @@ -15,6 +15,7 @@ import com.yahoo.searchdefinition.document.TemporaryImportedFields; import com.yahoo.searchdefinition.document.annotation.SDAnnotationType; import com.yahoo.vespa.documentmodel.DocumentSummary; import com.yahoo.vespa.documentmodel.SummaryField; +import com.yahoo.vespa.model.AbstractService; import java.io.Reader; import java.util.ArrayList; @@ -78,6 +79,9 @@ public class Search implements ImmutableSearch { /** The explicitly defined summaries of this search definition. _Must_ preserve order. */ private final Map<String, DocumentSummary> summaries = new LinkedHashMap<>(); + /** External rank expression files of this */ + private final RankExpressionFiles rankExpressionFiles = new RankExpressionFiles(); + /** Ranking constants of this */ private final RankingConstants rankingConstants = new RankingConstants(); @@ -172,11 +176,20 @@ public class Search implements ImmutableSearch { } @Override + public RankExpressionFiles rankExpressionFiles() { return rankExpressionFiles; } + + @Override public RankingConstants rankingConstants() { return rankingConstants; } @Override public OnnxModels onnxModels() { return onnxModels; } + public void sendTo(Collection<? extends AbstractService> services) { + rankingConstants.sendTo(services); + rankExpressionFiles.sendTo(services); + onnxModels.sendTo(services); + } + public Optional<TemporaryImportedFields> temporaryImportedFields() { return temporaryImportedFields; } diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/derived/DerivedConfiguration.java b/config-model/src/main/java/com/yahoo/searchdefinition/derived/DerivedConfiguration.java index 4d6ce783947..52d99c523ea 100644 --- a/config-model/src/main/java/com/yahoo/searchdefinition/derived/DerivedConfiguration.java +++ b/config-model/src/main/java/com/yahoo/searchdefinition/derived/DerivedConfiguration.java @@ -85,7 +85,8 @@ public class DerivedConfiguration { summaries = new Summaries(search, deployLogger); summaryMap = new SummaryMap(search); juniperrc = new Juniperrc(search); - rankProfileList = new RankProfileList(search, search.rankingConstants(), attributeFields, rankProfileRegistry, queryProfiles, importedModels, deployProperties); + rankProfileList = new RankProfileList(search, search.rankingConstants(), search.rankExpressionFiles(), attributeFields, + rankProfileRegistry, queryProfiles, importedModels, deployProperties); indexingScript = new IndexingScript(search); indexInfo = new IndexInfo(search); indexSchema = new IndexSchema(search); diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/derived/RankProfileList.java b/config-model/src/main/java/com/yahoo/searchdefinition/derived/RankProfileList.java index 5337d58fb82..c0a4117de3e 100644 --- a/config-model/src/main/java/com/yahoo/searchdefinition/derived/RankProfileList.java +++ b/config-model/src/main/java/com/yahoo/searchdefinition/derived/RankProfileList.java @@ -6,6 +6,8 @@ import com.yahoo.config.model.api.ModelContext; import com.yahoo.search.query.profile.QueryProfileRegistry; import com.yahoo.searchdefinition.OnnxModel; import com.yahoo.searchdefinition.OnnxModels; +import com.yahoo.searchdefinition.RankExpressionFile; +import com.yahoo.searchdefinition.RankExpressionFiles; import com.yahoo.searchdefinition.RankProfileRegistry; import com.yahoo.searchdefinition.RankingConstant; import com.yahoo.searchdefinition.RankingConstants; @@ -14,6 +16,7 @@ import com.yahoo.searchdefinition.RankProfile; import com.yahoo.searchdefinition.Search; import com.yahoo.vespa.config.search.core.OnnxModelsConfig; import com.yahoo.vespa.config.search.core.RankingConstantsConfig; +import com.yahoo.vespa.config.search.core.RankingExpressionsConfig; import com.yahoo.vespa.model.AbstractService; import java.util.Collection; @@ -25,21 +28,21 @@ import java.util.logging.Logger; * * @author bratseth */ -public class RankProfileList extends Derived implements RankProfilesConfig.Producer, - RankingConstantsConfig.Producer, - OnnxModelsConfig.Producer { +public class RankProfileList extends Derived implements RankProfilesConfig.Producer { private static final Logger log = Logger.getLogger(RankProfileList.class.getName()); private final Map<String, RawRankProfile> rankProfiles = new java.util.LinkedHashMap<>(); private final RankingConstants rankingConstants; + private final RankExpressionFiles rankExpressionFiles; private final OnnxModels onnxModels; public static RankProfileList empty = new RankProfileList(); private RankProfileList() { - this.rankingConstants = new RankingConstants(); - this.onnxModels = new OnnxModels(); + rankingConstants = new RankingConstants(); + rankExpressionFiles = new RankExpressionFiles(); + onnxModels = new OnnxModels(); } /** @@ -50,6 +53,7 @@ public class RankProfileList extends Derived implements RankProfilesConfig.Produ */ public RankProfileList(Search search, RankingConstants rankingConstants, + RankExpressionFiles rankExpressionFiles, AttributeFields attributeFields, RankProfileRegistry rankProfileRegistry, QueryProfileRegistry queryProfiles, @@ -57,7 +61,8 @@ public class RankProfileList extends Derived implements RankProfilesConfig.Produ ModelContext.Properties deployProperties) { setName(search == null ? "default" : search.getName()); this.rankingConstants = rankingConstants; - this.onnxModels = search == null ? new OnnxModels() : search.onnxModels(); // as ONNX models come from parsing rank expressions + this.rankExpressionFiles = rankExpressionFiles; + onnxModels = search == null ? new OnnxModels() : search.onnxModels(); // as ONNX models come from parsing rank expressions deriveRankProfiles(rankProfileRegistry, queryProfiles, importedModels, search, attributeFields, deployProperties); } @@ -90,11 +95,9 @@ public class RankProfileList extends Derived implements RankProfilesConfig.Produ return rankProfiles.get(name); } - public void sendConstantsTo(Collection<? extends AbstractService> services) { + public void sendTo(Collection<? extends AbstractService> services) { rankingConstants.sendTo(services); - } - - public void sendOnnxModelsTo(Collection<? extends AbstractService> services) { + rankExpressionFiles.sendTo(services); onnxModels.sendTo(services); } @@ -108,7 +111,10 @@ public class RankProfileList extends Derived implements RankProfilesConfig.Produ } } - @Override + public void getConfig(RankingExpressionsConfig.Builder builder) { + rankExpressionFiles.asMap().values().forEach((expr) -> builder.expression.add(new RankingExpressionsConfig.Expression.Builder().name(expr.getName()).fileref(expr.getFileReference()))); + } + public void getConfig(RankingConstantsConfig.Builder builder) { for (RankingConstant constant : rankingConstants.asMap().values()) { if ("".equals(constant.getFileReference())) @@ -121,7 +127,6 @@ public class RankProfileList extends Derived implements RankProfilesConfig.Produ } } - @Override public void getConfig(OnnxModelsConfig.Builder builder) { for (OnnxModel model : onnxModels.asMap().values()) { if ("".equals(model.getFileReference())) diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/derived/RawRankProfile.java b/config-model/src/main/java/com/yahoo/searchdefinition/derived/RawRankProfile.java index 4aa0a9daaca..a829989a281 100644 --- a/config-model/src/main/java/com/yahoo/searchdefinition/derived/RawRankProfile.java +++ b/config-model/src/main/java/com/yahoo/searchdefinition/derived/RawRankProfile.java @@ -232,12 +232,11 @@ public class RawRankProfile implements RankProfilesConfig.Producer { SerializationContext context = new SerializationContext(functionExpressions, null, functionProperties); for (Map.Entry<String, RankProfile.RankingExpressionFunction> e : functions.entrySet()) { String propertyName = RankingExpression.propertyName(e.getKey()); - if (context.serializedFunctions().containsKey(propertyName)) { - continue; - } + if (context.serializedFunctions().containsKey(propertyName)) continue; + String expressionString = e.getValue().function().getBody().getRoot().toString(new StringBuilder(), context, null, null).toString(); - context.addFunctionSerialization(RankingExpression.propertyName(e.getKey()), expressionString); + context.addFunctionSerialization(propertyName, expressionString); for (Map.Entry<String, TensorType> argumentType : e.getValue().function().argumentTypes().entrySet()) context.addArgumentTypeSerialization(e.getKey(), argumentType.getKey(), argumentType.getValue()); if (e.getValue().function().returnType().isPresent()) @@ -353,8 +352,8 @@ public class RawRankProfile implements RankProfilesConfig.Producer { properties.add(new Pair<>(property.getName(), property.getValue())); } } - properties.addAll(deriveRankingPhaseRankProperties(firstPhaseRanking, "firstphase")); - properties.addAll(deriveRankingPhaseRankProperties(secondPhaseRanking, "secondphase")); + properties.addAll(deriveRankingPhaseRankProperties(firstPhaseRanking, rankProfile.getFirstPhaseFile(), RankProfile.FIRST_PHASE)); + properties.addAll(deriveRankingPhaseRankProperties(secondPhaseRanking, rankProfile.getSecondPhaseFile(), RankProfile.SECOND_PHASE)); for (FieldRankSettings settings : fieldRankSettings.values()) { properties.addAll(settings.deriveRankProperties()); } @@ -421,7 +420,7 @@ public class RawRankProfile implements RankProfilesConfig.Producer { return properties; } - private List<Pair<String, String>> deriveRankingPhaseRankProperties(RankingExpression expression, String phase) { + private List<Pair<String, String>> deriveRankingPhaseRankProperties(RankingExpression expression, String fileName, String phase) { List<Pair<String, String>> properties = new ArrayList<>(); if (expression == null) return properties; diff --git a/config-model/src/main/java/com/yahoo/vespa/model/VespaModel.java b/config-model/src/main/java/com/yahoo/vespa/model/VespaModel.java index d78a69b4802..48e4bee0506 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/VespaModel.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/VespaModel.java @@ -30,6 +30,7 @@ import com.yahoo.config.model.producer.UserConfigRepo; import com.yahoo.config.provision.AllocatedHosts; import com.yahoo.config.provision.ClusterSpec; import com.yahoo.container.QrConfig; +import com.yahoo.searchdefinition.RankExpressionFiles; import com.yahoo.searchdefinition.RankProfile; import com.yahoo.searchdefinition.RankProfileRegistry; import com.yahoo.searchdefinition.RankingConstants; @@ -125,6 +126,9 @@ public final class VespaModel extends AbstractConfigProducerRoot implements Seri /** The global ranking constants of this model */ private final RankingConstants rankingConstants = new RankingConstants(); + /** External rank expression files of this */ + private final RankExpressionFiles rankExpressionFiles = new RankExpressionFiles(); + /** The validation overrides of this. This is never null. */ private final ValidationOverrides validationOverrides; @@ -177,12 +181,14 @@ public final class VespaModel extends AbstractConfigProducerRoot implements Seri createGlobalRankProfiles(deployState.getDeployLogger(), deployState.getImportedModels(), deployState.rankProfileRegistry(), deployState.getQueryProfiles()); - this.rankProfileList = new RankProfileList(null, // null search -> global - rankingConstants, AttributeFields.empty, - deployState.rankProfileRegistry(), - deployState.getQueryProfiles().getRegistry(), - deployState.getImportedModels(), - deployState.getProperties()); + rankProfileList = new RankProfileList(null, // null search -> global + rankingConstants, + rankExpressionFiles, + AttributeFields.empty, + deployState.rankProfileRegistry(), + deployState.getQueryProfiles().getRegistry(), + deployState.getImportedModels(), + deployState.getProperties()); HostSystem hostSystem = root.hostSystem(); if (complete) { // create a a completed, frozen model @@ -256,6 +262,8 @@ public final class VespaModel extends AbstractConfigProducerRoot implements Seri /** Returns the global ranking constants of this */ public RankingConstants rankingConstants() { return rankingConstants; } + public RankExpressionFiles rankExpressionFiles() { return rankExpressionFiles; } + /** Creates a mutable model with no services instantiated */ public static VespaModel createIncomplete(DeployState deployState) throws IOException, SAXException { return new VespaModel(new NullConfigModelRegistry(), deployState, false, diff --git a/config-model/src/main/java/com/yahoo/vespa/model/application/validation/RankSetupValidator.java b/config-model/src/main/java/com/yahoo/vespa/model/application/validation/RankSetupValidator.java index 7049213ddab..d87c6596fa4 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/application/validation/RankSetupValidator.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/application/validation/RankSetupValidator.java @@ -8,6 +8,8 @@ import com.yahoo.log.InvalidLogFormatException; import com.yahoo.log.LogMessage; import com.yahoo.path.Path; import com.yahoo.searchdefinition.OnnxModel; +import com.yahoo.searchdefinition.RankExpressionFile; +import com.yahoo.vespa.config.search.core.RankingExpressionsConfig; import com.yahoo.vespa.defaults.Defaults; import com.yahoo.yolean.Exceptions; import com.yahoo.system.ProcessExecuter; @@ -38,7 +40,6 @@ import java.util.logging.Logger; import java.util.logging.Level; import java.util.ArrayList; import java.util.List; -import java.util.Map; /** * Validate rank setup for all search clusters (rank-profiles, index-schema, attributes configs), validating done @@ -116,50 +117,61 @@ public class RankSetupValidator extends Validator { } private void writeConfigs(String dir, AbstractConfigProducer<?> producer) throws IOException { - RankProfilesConfig.Builder rpcb = new RankProfilesConfig.Builder(); - ((RankProfilesConfig.Producer) producer).getConfig(rpcb); - RankProfilesConfig rpc = new RankProfilesConfig(rpcb); - writeConfig(dir, RankProfilesConfig.getDefName() + ".cfg", rpc); - - IndexschemaConfig.Builder iscb = new IndexschemaConfig.Builder(); - ((IndexschemaConfig.Producer) producer).getConfig(iscb); - IndexschemaConfig isc = new IndexschemaConfig(iscb); - writeConfig(dir, IndexschemaConfig.getDefName() + ".cfg", isc); - - AttributesConfig.Builder acb = new AttributesConfig.Builder(); - ((AttributesConfig.Producer) producer).getConfig(acb); - AttributesConfig ac = new AttributesConfig(acb); - writeConfig(dir, AttributesConfig.getDefName() + ".cfg", ac); - - RankingConstantsConfig.Builder rccb = new RankingConstantsConfig.Builder(); - ((RankingConstantsConfig.Producer) producer).getConfig(rccb); - RankingConstantsConfig rcc = new RankingConstantsConfig(rccb); - writeConfig(dir, RankingConstantsConfig.getDefName() + ".cfg", rcc); - - OnnxModelsConfig.Builder omcb = new OnnxModelsConfig.Builder(); - ((OnnxModelsConfig.Producer) producer).getConfig(omcb); - OnnxModelsConfig omc = new OnnxModelsConfig(omcb); - writeConfig(dir, OnnxModelsConfig.getDefName() + ".cfg", omc); - - ImportedFieldsConfig.Builder ifcb = new ImportedFieldsConfig.Builder(); - ((ImportedFieldsConfig.Producer) producer).getConfig(ifcb); - ImportedFieldsConfig ifc = new ImportedFieldsConfig(ifcb); - writeConfig(dir, ImportedFieldsConfig.getDefName() + ".cfg", ifc); + RankProfilesConfig.Builder rpcb = new RankProfilesConfig.Builder(); + ((RankProfilesConfig.Producer) producer).getConfig(rpcb); + RankProfilesConfig rpc = new RankProfilesConfig(rpcb); + writeConfig(dir, RankProfilesConfig.getDefName() + ".cfg", rpc); + + IndexschemaConfig.Builder iscb = new IndexschemaConfig.Builder(); + ((IndexschemaConfig.Producer) producer).getConfig(iscb); + IndexschemaConfig isc = new IndexschemaConfig(iscb); + writeConfig(dir, IndexschemaConfig.getDefName() + ".cfg", isc); + + AttributesConfig.Builder acb = new AttributesConfig.Builder(); + ((AttributesConfig.Producer) producer).getConfig(acb); + AttributesConfig ac = new AttributesConfig(acb); + writeConfig(dir, AttributesConfig.getDefName() + ".cfg", ac); + + RankingConstantsConfig.Builder rccb = new RankingConstantsConfig.Builder(); + ((RankingConstantsConfig.Producer) producer).getConfig(rccb); + RankingConstantsConfig rcc = new RankingConstantsConfig(rccb); + writeConfig(dir, RankingConstantsConfig.getDefName() + ".cfg", rcc); + + RankingExpressionsConfig.Builder recb = new RankingExpressionsConfig.Builder(); + ((RankingExpressionsConfig.Producer) producer).getConfig(recb); + RankingExpressionsConfig rec = new RankingExpressionsConfig(recb); + writeConfig(dir, RankingExpressionsConfig.getDefName() + ".cfg", rec); + + OnnxModelsConfig.Builder omcb = new OnnxModelsConfig.Builder(); + ((OnnxModelsConfig.Producer) producer).getConfig(omcb); + OnnxModelsConfig omc = new OnnxModelsConfig(omcb); + writeConfig(dir, OnnxModelsConfig.getDefName() + ".cfg", omc); + + ImportedFieldsConfig.Builder ifcb = new ImportedFieldsConfig.Builder(); + ((ImportedFieldsConfig.Producer) producer).getConfig(ifcb); + ImportedFieldsConfig ifc = new ImportedFieldsConfig(ifcb); + writeConfig(dir, ImportedFieldsConfig.getDefName() + ".cfg", ifc); } private void writeExtraVerifyRanksetupConfig(String dir, DocumentDatabase db) throws IOException { String configName = "verify-ranksetup.cfg"; String configContent = ""; + List<String> config = new ArrayList<>(); // Assist verify-ranksetup in finding the actual ONNX model files - Map<String, OnnxModel> models = db.getDerivedConfiguration().getSearch().onnxModels().asMap(); - if (models.values().size() > 0) { - List<String> config = new ArrayList<>(models.values().size() * 2); - for (OnnxModel model : models.values()) { - String modelPath = getFileRepositoryPath(model.getFilePath(), model.getFileReference()); - config.add(String.format("file[%d].ref \"%s\"", config.size() / 2, model.getFileReference())); - config.add(String.format("file[%d].path \"%s\"", config.size() / 2, modelPath)); - } + for (OnnxModel model : db.getDerivedConfiguration().getSearch().onnxModels().asMap().values()) { + String modelPath = getFileRepositoryPath(model.getFilePath(), model.getFileReference()); + config.add(String.format("file[%d].ref \"%s\"", config.size() / 2, model.getFileReference())); + config.add(String.format("file[%d].path \"%s\"", config.size() / 2, modelPath)); + } + + for (RankExpressionFile expr : db.getDerivedConfiguration().getSearch().rankExpressionFiles().asMap().values()) { + String modelPath = getFileRepositoryPath(expr.getFilePath(), expr.getFileReference()); + config.add(String.format("file[%d].ref \"%s\"", config.size() / 2, expr.getFileReference())); + config.add(String.format("file[%d].path \"%s\"", config.size() / 2, modelPath)); + } + + if ( ! config.isEmpty() ) { configContent = StringUtilities.implodeMultiline(config); } IOUtils.writeFile(dir + configName, configContent, false); diff --git a/config-model/src/main/java/com/yahoo/vespa/model/container/ApplicationContainerCluster.java b/config-model/src/main/java/com/yahoo/vespa/model/container/ApplicationContainerCluster.java index 4e78f44d0fe..317ed0f66c7 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/container/ApplicationContainerCluster.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/container/ApplicationContainerCluster.java @@ -25,6 +25,7 @@ import com.yahoo.search.config.QrStartConfig; import com.yahoo.vespa.config.search.RankProfilesConfig; import com.yahoo.vespa.config.search.core.OnnxModelsConfig; import com.yahoo.vespa.config.search.core.RankingConstantsConfig; +import com.yahoo.vespa.config.search.core.RankingExpressionsConfig; import com.yahoo.vespa.model.admin.metricsproxy.MetricsProxyContainer; import com.yahoo.vespa.model.container.component.BindingPattern; import com.yahoo.vespa.model.container.component.Component; @@ -58,6 +59,7 @@ public final class ApplicationContainerCluster extends ContainerCluster<Applicat RankProfilesConfig.Producer, RankingConstantsConfig.Producer, OnnxModelsConfig.Producer, + RankingExpressionsConfig.Producer, ServletPathsConfig.Producer, ContainerMbusConfig.Producer, MetricsProxyApiConfig.Producer, @@ -233,6 +235,10 @@ public final class ApplicationContainerCluster extends ContainerCluster<Applicat if (modelEvaluation != null) modelEvaluation.getConfig(builder); } + public void getConfig(RankingExpressionsConfig.Builder builder) { + if (modelEvaluation != null) modelEvaluation.getConfig(builder); + } + @Override public void getConfig(ContainerMbusConfig.Builder builder) { if (mbusParams != null) { diff --git a/config-model/src/main/java/com/yahoo/vespa/model/container/ContainerModelEvaluation.java b/config-model/src/main/java/com/yahoo/vespa/model/container/ContainerModelEvaluation.java index 510d2fe3d99..37bfb8821c3 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/container/ContainerModelEvaluation.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/container/ContainerModelEvaluation.java @@ -7,6 +7,7 @@ import com.yahoo.searchdefinition.derived.RankProfileList; import com.yahoo.vespa.config.search.RankProfilesConfig; import com.yahoo.vespa.config.search.core.OnnxModelsConfig; import com.yahoo.vespa.config.search.core.RankingConstantsConfig; +import com.yahoo.vespa.config.search.core.RankingExpressionsConfig; import com.yahoo.vespa.model.container.component.Handler; import com.yahoo.vespa.model.container.component.SystemBindingPattern; @@ -18,10 +19,12 @@ import java.util.Objects; * * @author bratseth */ -public class ContainerModelEvaluation implements RankProfilesConfig.Producer, - RankingConstantsConfig.Producer, - OnnxModelsConfig.Producer -{ + +public class ContainerModelEvaluation implements + RankProfilesConfig.Producer, + RankingConstantsConfig.Producer, + OnnxModelsConfig.Producer, + RankingExpressionsConfig.Producer { private final static String BUNDLE_NAME = "model-evaluation"; private final static String EVALUATOR_NAME = ModelsEvaluator.class.getName(); @@ -38,8 +41,7 @@ public class ContainerModelEvaluation implements RankProfilesConfig.Producer, } public void prepare(List<ApplicationContainer> containers) { - rankProfileList.sendConstantsTo(containers); - rankProfileList.sendOnnxModelsTo(containers); + rankProfileList.sendTo(containers); } @Override @@ -57,6 +59,10 @@ public class ContainerModelEvaluation implements RankProfilesConfig.Producer, rankProfileList.getConfig(builder); } + public void getConfig(RankingExpressionsConfig.Builder builder) { + rankProfileList.getConfig(builder); + } + public static Handler<?> getHandler() { Handler<?> handler = new Handler<>(new ComponentModel(REST_HANDLER_NAME, null, BUNDLE_NAME)); handler.addServerBindings( diff --git a/config-model/src/main/java/com/yahoo/vespa/model/search/AbstractSearchCluster.java b/config-model/src/main/java/com/yahoo/vespa/model/search/AbstractSearchCluster.java index 705c48d1c9b..3ca5b9e3a0a 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/search/AbstractSearchCluster.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/search/AbstractSearchCluster.java @@ -39,8 +39,7 @@ public abstract class AbstractSearchCluster extends AbstractConfigProducer<Abstr public void prepareToDistributeFiles(List<SearchNode> backends) { for (SchemaSpec sds : localSDS) { - sds.getSearchDefinition().getSearch().rankingConstants().sendTo(backends); - sds.getSearchDefinition().getSearch().onnxModels().sendTo(backends); + sds.getSearchDefinition().getSearch().sendTo(backends); } } diff --git a/config-model/src/main/java/com/yahoo/vespa/model/search/DocumentDatabase.java b/config-model/src/main/java/com/yahoo/vespa/model/search/DocumentDatabase.java index 8d4c1675bbf..9f0ff7db9f8 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/search/DocumentDatabase.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/search/DocumentDatabase.java @@ -12,6 +12,7 @@ import com.yahoo.vespa.config.search.SummaryConfig; import com.yahoo.vespa.config.search.SummarymapConfig; import com.yahoo.vespa.config.search.core.OnnxModelsConfig; import com.yahoo.vespa.config.search.core.RankingConstantsConfig; +import com.yahoo.vespa.config.search.core.RankingExpressionsConfig; import com.yahoo.vespa.config.search.summary.JuniperrcConfig; import com.yahoo.vespa.configdefinition.IlscriptsConfig; @@ -26,6 +27,7 @@ public class DocumentDatabase extends AbstractConfigProducer<DocumentDatabase> i AttributesConfig.Producer, RankProfilesConfig.Producer, RankingConstantsConfig.Producer, + RankingExpressionsConfig.Producer, OnnxModelsConfig.Producer, IndexschemaConfig.Producer, JuniperrcConfig.Producer, @@ -75,6 +77,11 @@ public class DocumentDatabase extends AbstractConfigProducer<DocumentDatabase> i } @Override + public void getConfig(RankingExpressionsConfig.Builder builder) { + derivedCfg.getRankProfileList().getConfig(builder); + } + + @Override public void getConfig(RankingConstantsConfig.Builder builder) { derivedCfg.getRankProfileList().getConfig(builder); } diff --git a/config-model/src/test/java/com/yahoo/vespa/model/ml/ModelEvaluationTest.java b/config-model/src/test/java/com/yahoo/vespa/model/ml/ModelEvaluationTest.java index e32ad274325..9f18cfb4bd9 100644 --- a/config-model/src/test/java/com/yahoo/vespa/model/ml/ModelEvaluationTest.java +++ b/config-model/src/test/java/com/yahoo/vespa/model/ml/ModelEvaluationTest.java @@ -98,6 +98,7 @@ public class ModelEvaluationTest { RankingConstantsConfig constantsConfig = new RankingConstantsConfig(cb); RankingExpressionsConfig.Builder ce = new RankingExpressionsConfig.Builder(); + cluster.getConfig(ce); RankingExpressionsConfig expressionsConfig = ce.build(); OnnxModelsConfig.Builder ob = new OnnxModelsConfig.Builder(); |