summaryrefslogtreecommitdiffstats
path: root/config-model
diff options
context:
space:
mode:
authorMariusArhaug <mariusarhaug@hotmail.com>2024-04-04 16:04:46 +0200
committerMariusArhaug <mariusarhaug@hotmail.com>2024-04-04 16:18:35 +0200
commit218205b80900f85167ec028e5cc55bbe98702dbd (patch)
treefa6d3091fae88926b5ffd289c50ab768baaba17f /config-model
parent626c886af679c06616a928b3ebbc5e840dd68d8e (diff)
add significance config model registry
Diffstat (limited to 'config-model')
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/container/component/SignificanceModelRegistry.java73
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/container/xml/ContainerModelBuilder.java11
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/container/xml/ModelIdResolver.java1
-rw-r--r--config-model/src/main/resources/schema/containercluster.rnc7
-rw-r--r--config-model/src/test/cfg/significance/hosts.xml9
-rw-r--r--config-model/src/test/cfg/significance/schemas/music.sd12
-rw-r--r--config-model/src/test/cfg/significance/services.xml29
-rw-r--r--config-model/src/test/java/com/yahoo/vespa/model/significance/test/SignificanceModelTestCase.java28
-rw-r--r--config-model/src/test/schema-test-files/services.xml4
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>