diff options
author | MariusArhaug <mariusarhaug@hotmail.com> | 2024-04-04 16:04:46 +0200 |
---|---|---|
committer | MariusArhaug <mariusarhaug@hotmail.com> | 2024-04-04 16:18:35 +0200 |
commit | 218205b80900f85167ec028e5cc55bbe98702dbd (patch) | |
tree | fa6d3091fae88926b5ffd289c50ab768baaba17f /config-model | |
parent | 626c886af679c06616a928b3ebbc5e840dd68d8e (diff) |
add significance config model registry
Diffstat (limited to 'config-model')
9 files changed, 173 insertions, 1 deletions
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/container/component/SignificanceModelRegistry.java b/config-model/src/main/java/com/yahoo/vespa/model/container/component/SignificanceModelRegistry.java new file mode 100644 index 00000000000..fafa846d64d --- /dev/null +++ b/config-model/src/main/java/com/yahoo/vespa/model/container/component/SignificanceModelRegistry.java @@ -0,0 +1,73 @@ +// Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +package com.yahoo.vespa.model.container.component; + +import com.yahoo.config.ModelReference; +import com.yahoo.config.model.deploy.DeployState; +import com.yahoo.container.bundle.BundleInstantiationSpecification; +import com.yahoo.osgi.provider.model.ComponentModel; +import com.yahoo.search.significance.config.SignificanceConfig; +import com.yahoo.text.XML; +import org.w3c.dom.Element; + +import java.util.ArrayList; +import java.util.List; +import java.util.Set; + +import static com.yahoo.vespa.model.container.xml.ModelIdResolver.SIGNIFICANCE_MODEL; + +/** + * A registry for significance models. + * + * @author MariusArhaug + * + */ +public class SignificanceModelRegistry extends SimpleComponent implements SignificanceConfig.Producer { + + private static final String CLASS = "com.yahoo.search.significance.DefaultSignificanceModelRegistry"; + private static final String BUNDLE = "linguistics"; + + private final List<SignificanceModelConfig> configList; + + public SignificanceModelRegistry(DeployState deployState, Element spec) { + super(new ComponentModel(BundleInstantiationSpecification.fromStrings(CLASS, CLASS, BUNDLE))); + configList = new ArrayList<>(); + + for (Element modelElement : XML.getChildren(spec, "model")) { + addConfig( + modelElement.getAttribute("language"), + Model.fromXml(deployState, modelElement, Set.of(SIGNIFICANCE_MODEL)).modelReference()); + } + } + + + public void addConfig(String language, ModelReference path) { + configList.add( + new SignificanceModelConfig(language, path) + ); + } + + + @Override + public void getConfig(SignificanceConfig.Builder builder) { + builder.model( + configList.stream() + .map(config -> new SignificanceConfig.Model.Builder() + .language(config.language) + .path(config.path) + ).toList() + ); + } + + + class SignificanceModelConfig { + private final String language; + private final ModelReference path; + + public SignificanceModelConfig(String language, ModelReference path) { + this.language = language; + this.path = path; + } + + } +} + diff --git a/config-model/src/main/java/com/yahoo/vespa/model/container/xml/ContainerModelBuilder.java b/config-model/src/main/java/com/yahoo/vespa/model/container/xml/ContainerModelBuilder.java index eac03531b86..400d86aa67a 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/container/xml/ContainerModelBuilder.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/container/xml/ContainerModelBuilder.java @@ -83,6 +83,7 @@ import com.yahoo.vespa.model.container.component.Handler; import com.yahoo.vespa.model.container.component.SimpleComponent; import com.yahoo.vespa.model.container.component.SystemBindingPattern; import com.yahoo.vespa.model.container.component.UserBindingPattern; +import com.yahoo.vespa.model.container.component.SignificanceModelRegistry; import com.yahoo.vespa.model.container.docproc.ContainerDocproc; import com.yahoo.vespa.model.container.docproc.DocprocChains; import com.yahoo.vespa.model.container.http.AccessControl; @@ -212,6 +213,7 @@ public class ContainerModelBuilder extends ConfigModelBuilder<ContainerModel> { addProcessing(deployState, spec, cluster, context); addSearch(deployState, spec, cluster, context); + addSignificance(deployState, spec, cluster); addDocproc(deployState, spec, cluster); addDocumentApi(deployState, spec, cluster, context); // NOTE: Must be done after addSearch @@ -767,6 +769,15 @@ public class ContainerModelBuilder extends ConfigModelBuilder<ContainerModel> { validateAndAddConfiguredComponents(deployState, cluster, searchElement, "renderer", ContainerModelBuilder::validateRendererElement); } + private void addSignificance(DeployState deployState, Element spec, ApplicationContainerCluster cluster) { + Element significanceElement = XML.getChild(spec, "significance"); + if (significanceElement == null) return; + + SignificanceModelRegistry significanceModelRegistry = new SignificanceModelRegistry(deployState, significanceElement); + cluster.addComponent(significanceModelRegistry); + + } + private void addModelEvaluation(Element spec, ApplicationContainerCluster cluster, ConfigModelContext context) { Element modelEvaluationElement = XML.getChild(spec, "model-evaluation"); if (modelEvaluationElement == null) return; diff --git a/config-model/src/main/java/com/yahoo/vespa/model/container/xml/ModelIdResolver.java b/config-model/src/main/java/com/yahoo/vespa/model/container/xml/ModelIdResolver.java index 9ff9344edcb..f9993b770e5 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/container/xml/ModelIdResolver.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/container/xml/ModelIdResolver.java @@ -25,6 +25,7 @@ public class ModelIdResolver { public static final String HF_TOKENIZER = "huggingface-tokenizer"; public static final String ONNX_MODEL = "onnx-model"; public static final String BERT_VOCAB = "bert-vocabulary"; + public static final String SIGNIFICANCE_MODEL = "significance-model"; private static Map<String, ProvidedModel> setupProvidedModels() { var m = new HashMap<String, ProvidedModel>(); diff --git a/config-model/src/main/resources/schema/containercluster.rnc b/config-model/src/main/resources/schema/containercluster.rnc index f24a1511318..86f6950aa1a 100644 --- a/config-model/src/main/resources/schema/containercluster.rnc +++ b/config-model/src/main/resources/schema/containercluster.rnc @@ -137,6 +137,10 @@ Threadpool = element threadpool { )) } +Significance = element significance { + element model { attribute language { xsd:string } & ModelReference }* +} + Clients = element clients { Client* } @@ -161,7 +165,8 @@ SearchInContainer = element search { Provider* & Renderer* & GenericConfig* & - Threadpool? + Threadpool? & + Significance? } SearchChain = element chain { diff --git a/config-model/src/test/cfg/significance/hosts.xml b/config-model/src/test/cfg/significance/hosts.xml new file mode 100644 index 00000000000..b06f676ac28 --- /dev/null +++ b/config-model/src/test/cfg/significance/hosts.xml @@ -0,0 +1,9 @@ +<?xml version="1.0" encoding="utf-8" ?> +<!-- Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. --> +<hosts> + <host name="mynode1"> + <alias>node0</alias> + </host> + +</hosts> + diff --git a/config-model/src/test/cfg/significance/schemas/music.sd b/config-model/src/test/cfg/significance/schemas/music.sd new file mode 100644 index 00000000000..500d41aaf14 --- /dev/null +++ b/config-model/src/test/cfg/significance/schemas/music.sd @@ -0,0 +1,12 @@ +# Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +search music { + document music { + field f1 type string { + indexing: summary | index + } + field f2 type string { + indexing: summary | index + } + } +} + diff --git a/config-model/src/test/cfg/significance/services.xml b/config-model/src/test/cfg/significance/services.xml new file mode 100644 index 00000000000..7a0679dc6c2 --- /dev/null +++ b/config-model/src/test/cfg/significance/services.xml @@ -0,0 +1,29 @@ +<?xml version="1.0" encoding="utf-8" ?> +<!-- Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. --> +<services> + <admin version="2.0"> + <adminserver hostalias="node0"/> + <logserver hostalias="node0"/> + </admin> + <container version="1.0"> + <search> + <significance> + <model language="en" model-id="idf-wiki-english"/> + <model language="no" path="models/idf-norwegian-wiki.json.zst" /> + <model language="ru" url="https://some/uri/blob.json" /> + </significance> + </search> + </container> + <content version="1.0"> + <redundancy>1</redundancy> + + <documents> + <document type="music" mode="index"/> + </documents> + + <group name="mycluster"> + <node hostalias="node0" distribution-key="0" capacity="0.79"/> + </group> + </content> +</services> + diff --git a/config-model/src/test/java/com/yahoo/vespa/model/significance/test/SignificanceModelTestCase.java b/config-model/src/test/java/com/yahoo/vespa/model/significance/test/SignificanceModelTestCase.java new file mode 100644 index 00000000000..9dc3c72ba64 --- /dev/null +++ b/config-model/src/test/java/com/yahoo/vespa/model/significance/test/SignificanceModelTestCase.java @@ -0,0 +1,28 @@ +// Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +package com.yahoo.vespa.model.significance.test; + +import com.yahoo.vespa.model.VespaModel; +import com.yahoo.vespa.model.container.ApplicationContainerCluster; +import com.yahoo.vespa.model.test.utils.VespaModelCreatorWithFilePkg; +import org.junit.jupiter.api.Test; + + +import static org.junit.jupiter.api.Assertions.assertEquals; + +/** + * @author MariusArhaug + */ + +public class SignificanceModelTestCase { + private VespaModel createModel(String filename) { + return new VespaModelCreatorWithFilePkg(filename).create(); + } + + @Test + void testIndexGreaterThanNumNodes() { + VespaModel vespaModel = createModel("src/test/cfg/significance"); + ApplicationContainerCluster containerCluster = vespaModel.getContainerClusters().get("container"); + assertEquals(1, containerCluster.getContainers().size()); + } +} + diff --git a/config-model/src/test/schema-test-files/services.xml b/config-model/src/test/schema-test-files/services.xml index 63b05a0ddfe..7333ef5a87b 100644 --- a/config-model/src/test/schema-test-files/services.xml +++ b/config-model/src/test/schema-test-files/services.xml @@ -166,6 +166,10 @@ <min-threads>500</min-threads> <queue-size>0</queue-size> </threadpool> + + <significance> + <model language="en" model-id="idf-wiki-simple-english" path="models/idf-simple-english-wiki.json.zst" /> + </significance> </search> <processing> |