This is an automated email from the ASF dual-hosted git repository.
alessandrobenedetti pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/solr.git
The following commit(s) were added to refs/heads/main by this push:
new d848be3f9e9 Text-to-vector Test Refactoring (#4419)
d848be3f9e9 is described below
commit d848be3f9e9500d25f1fe8381cb35cf3e937364e
Author: Nicolò Rinaldi <[email protected]>
AuthorDate: Thu May 21 16:57:49 2026 +0200
Text-to-vector Test Refactoring (#4419)
---
.../PR#4419-lenguage-model-test-refactoring.yml | 9 ++
.../model/SolrTextToVectorModel.java | 4 +-
.../search/TextToVectorQParserPlugin.java | 12 +-
...ModelStore.java => TextToVectorModelStore.java} | 11 +-
.../TextToVectorUpdateProcessorFactory.java | 17 ++-
.../solr/languagemodels/TestLanguageModelBase.java | 23 ++--
.../search/TextToVectorQParserTest.java | 2 +-
.../store/rest/TestModelManagerPersistence.java | 109 ------------------
...ager.java => TestTextToVectorModelManager.java} | 128 ++++++++++-----------
.../TestTextToVectorModelManagerPersistence.java | 103 +++++++++++++++++
... TestTextToVectorModelStoreInitialization.java} | 20 ++--
.../processor/TextToVectorUpdateProcessorTest.java | 30 ++---
.../TextToVectorUpdateProcessorFactoryTest.java | 4 +-
.../modules/query-guide/pages/text-to-vector.adoc | 2 -
14 files changed, 232 insertions(+), 242 deletions(-)
diff --git a/changelog/unreleased/PR#4419-lenguage-model-test-refactoring.yml
b/changelog/unreleased/PR#4419-lenguage-model-test-refactoring.yml
new file mode 100644
index 00000000000..f74147d1520
--- /dev/null
+++ b/changelog/unreleased/PR#4419-lenguage-model-test-refactoring.yml
@@ -0,0 +1,9 @@
+title: Refactor the tests of the language-model module to accomodate new
upcoming LLM oriented features avoiding code duplication.
+type: fixed
+authors:
+ - name: Nicolò Rinaldi
+ - name: Anna Ruggero
+ - name: Alessandro benedetti
+links:
+ - name: PR#4419
+ url: https://github.com/apache/solr/pull/4419
diff --git
a/solr/modules/language-models/src/java/org/apache/solr/languagemodels/model/SolrTextToVectorModel.java
b/solr/modules/language-models/src/java/org/apache/solr/languagemodels/model/SolrTextToVectorModel.java
index cb34d7b621b..9b171d2e51d 100644
---
a/solr/modules/language-models/src/java/org/apache/solr/languagemodels/model/SolrTextToVectorModel.java
+++
b/solr/modules/language-models/src/java/org/apache/solr/languagemodels/model/SolrTextToVectorModel.java
@@ -29,13 +29,13 @@ import org.apache.lucene.util.RamUsageEstimator;
import org.apache.solr.common.SolrException;
import org.apache.solr.core.SolrResourceLoader;
import org.apache.solr.languagemodels.LanguageModelException;
-import org.apache.solr.languagemodels.store.rest.ManagedTextToVectorModelStore;
+import org.apache.solr.languagemodels.store.rest.TextToVectorModelStore;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* This object wraps a {@link EmbeddingModel} to encode text to vector. It's
meant to be used as a
- * managed resource with the {@link ManagedTextToVectorModelStore}
+ * managed resource with the {@link TextToVectorModelStore}
*/
public class SolrTextToVectorModel extends SolrLanguageModel implements
Accountable {
private static final Logger log =
LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
diff --git
a/solr/modules/language-models/src/java/org/apache/solr/languagemodels/search/TextToVectorQParserPlugin.java
b/solr/modules/language-models/src/java/org/apache/solr/languagemodels/search/TextToVectorQParserPlugin.java
index 9cbfbf5dc1f..01d7b0c0554 100644
---
a/solr/modules/language-models/src/java/org/apache/solr/languagemodels/search/TextToVectorQParserPlugin.java
+++
b/solr/modules/language-models/src/java/org/apache/solr/languagemodels/search/TextToVectorQParserPlugin.java
@@ -27,7 +27,7 @@ import org.apache.solr.common.params.SolrParams;
import org.apache.solr.common.util.NamedList;
import org.apache.solr.core.SolrResourceLoader;
import org.apache.solr.languagemodels.model.SolrTextToVectorModel;
-import org.apache.solr.languagemodels.store.rest.ManagedTextToVectorModelStore;
+import org.apache.solr.languagemodels.store.rest.TextToVectorModelStore;
import org.apache.solr.request.SolrQueryRequest;
import org.apache.solr.rest.ManagedResource;
import org.apache.solr.rest.ManagedResourceObserver;
@@ -44,7 +44,7 @@ import org.apache.solr.search.vector.KnnQParser;
public class TextToVectorQParserPlugin extends QParserPlugin
implements ResourceLoaderAware, ManagedResourceObserver {
public static final String EMBEDDING_MODEL_PARAM = "model";
- private ManagedTextToVectorModelStore modelStore = null;
+ private TextToVectorModelStore modelStore = null;
@Override
public QParser createParser(
@@ -55,14 +55,14 @@ public class TextToVectorQParserPlugin extends QParserPlugin
@Override
public void inform(ResourceLoader loader) throws IOException {
final SolrResourceLoader solrResourceLoader = (SolrResourceLoader) loader;
-
ManagedTextToVectorModelStore.registerManagedTextToVectorModelStore(solrResourceLoader,
this);
+
TextToVectorModelStore.registerManagedTextToVectorModelStore(solrResourceLoader,
this);
}
@Override
public void onManagedResourceInitialized(NamedList<?> args, ManagedResource
res)
throws SolrException {
- if (res instanceof ManagedTextToVectorModelStore) {
- modelStore = (ManagedTextToVectorModelStore) res;
+ if (res instanceof TextToVectorModelStore) {
+ modelStore = (TextToVectorModelStore) res;
}
if (modelStore != null) {
modelStore.loadStoredModels();
@@ -105,7 +105,7 @@ public class TextToVectorQParserPlugin extends QParserPlugin
"The model requested '"
+ embeddingModelName
+ "' can't be found in the store: "
- + ManagedTextToVectorModelStore.REST_END_POINT);
+ + TextToVectorModelStore.REST_END_POINT);
}
}
}
diff --git
a/solr/modules/language-models/src/java/org/apache/solr/languagemodels/store/rest/ManagedTextToVectorModelStore.java
b/solr/modules/language-models/src/java/org/apache/solr/languagemodels/store/rest/TextToVectorModelStore.java
similarity index 84%
rename from
solr/modules/language-models/src/java/org/apache/solr/languagemodels/store/rest/ManagedTextToVectorModelStore.java
rename to
solr/modules/language-models/src/java/org/apache/solr/languagemodels/store/rest/TextToVectorModelStore.java
index d0f364062e7..f9136a0f724 100644
---
a/solr/modules/language-models/src/java/org/apache/solr/languagemodels/store/rest/ManagedTextToVectorModelStore.java
+++
b/solr/modules/language-models/src/java/org/apache/solr/languagemodels/store/rest/TextToVectorModelStore.java
@@ -27,8 +27,7 @@ import org.apache.solr.rest.ManagedResourceStorage;
/** Managed Resource wrapper for the text-to-vector model store, exposed via
REST */
@ThreadSafe
-public class ManagedTextToVectorModelStore
- extends ManagedLanguageModelStore<SolrTextToVectorModel> {
+public class TextToVectorModelStore extends
ManagedLanguageModelStore<SolrTextToVectorModel> {
/** the model store rest endpoint */
public static final String REST_END_POINT =
"/schema/text-to-vector-model-store";
@@ -38,11 +37,11 @@ public class ManagedTextToVectorModelStore
solrResourceLoader
.getManagedResourceRegistry()
.registerManagedResource(
- REST_END_POINT, ManagedTextToVectorModelStore.class,
managedResourceObserver);
+ REST_END_POINT, TextToVectorModelStore.class,
managedResourceObserver);
}
- public static ManagedTextToVectorModelStore getManagedModelStore(SolrCore
core) {
- return (ManagedTextToVectorModelStore)
core.getRestManager().getManagedResource(REST_END_POINT);
+ public static TextToVectorModelStore getManagedModelStore(SolrCore core) {
+ return (TextToVectorModelStore)
core.getRestManager().getManagedResource(REST_END_POINT);
}
@Override
@@ -56,7 +55,7 @@ public class ManagedTextToVectorModelStore
(Map<String, Object>) textToVectorModel.get(PARAMS_KEY));
}
- public ManagedTextToVectorModelStore(
+ public TextToVectorModelStore(
String resourceId, SolrResourceLoader loader,
ManagedResourceStorage.StorageIO storageIO)
throws SolrException {
super(resourceId, loader, storageIO);
diff --git
a/solr/modules/language-models/src/java/org/apache/solr/languagemodels/update/processor/factory/TextToVectorUpdateProcessorFactory.java
b/solr/modules/language-models/src/java/org/apache/solr/languagemodels/update/processor/factory/TextToVectorUpdateProcessorFactory.java
index f8c35906093..68f2e17e85a 100644
---
a/solr/modules/language-models/src/java/org/apache/solr/languagemodels/update/processor/factory/TextToVectorUpdateProcessorFactory.java
+++
b/solr/modules/language-models/src/java/org/apache/solr/languagemodels/update/processor/factory/TextToVectorUpdateProcessorFactory.java
@@ -24,7 +24,7 @@ import org.apache.solr.common.util.NamedList;
import org.apache.solr.core.SolrCore;
import org.apache.solr.core.SolrResourceLoader;
import org.apache.solr.languagemodels.model.SolrTextToVectorModel;
-import org.apache.solr.languagemodels.store.rest.ManagedTextToVectorModelStore;
+import org.apache.solr.languagemodels.store.rest.TextToVectorModelStore;
import
org.apache.solr.languagemodels.update.processor.TextToVectorUpdateProcessor;
import org.apache.solr.request.SolrQueryRequest;
import org.apache.solr.response.SolrQueryResponse;
@@ -44,7 +44,7 @@ import org.apache.solr.util.plugin.SolrCoreAware;
* <p>The parameters supported are:
*
* <pre class="prettyprint" >
- * <processor
class="solr.llm.textvectorisation.update.processor.TextToVectorUpdateProcessorFactory">
+ * <processor
class="solr.languagemodels.update.processor.factory.TextToVectorUpdateProcessorFactory">
* <str name="inputField">textualField</str>
* <str name="outputField">vectorField</str>
* <str name="model">textToVectorModel</str>
@@ -58,7 +58,7 @@ public class TextToVectorUpdateProcessorFactory extends
UpdateRequestProcessorFa
private static final String INPUT_FIELD_PARAM = "inputField";
private static final String OUTPUT_FIELD_PARAM = "outputField";
private static final String MODEL_NAME = "model";
- private ManagedTextToVectorModelStore modelStore = null;
+ private TextToVectorModelStore modelStore = null;
private String inputField;
private String outputField;
@@ -77,14 +77,14 @@ public class TextToVectorUpdateProcessorFactory extends
UpdateRequestProcessorFa
@Override
public void inform(SolrCore core) {
final SolrResourceLoader solrResourceLoader = core.getResourceLoader();
-
ManagedTextToVectorModelStore.registerManagedTextToVectorModelStore(solrResourceLoader,
this);
+
TextToVectorModelStore.registerManagedTextToVectorModelStore(solrResourceLoader,
this);
}
@Override
public void onManagedResourceInitialized(NamedList<?> args, ManagedResource
res)
throws SolrException {
- if (res instanceof ManagedTextToVectorModelStore) {
- modelStore = (ManagedTextToVectorModelStore) res;
+ if (res instanceof TextToVectorModelStore) {
+ modelStore = (TextToVectorModelStore) res;
}
if (modelStore != null) {
modelStore.loadStoredModels();
@@ -104,8 +104,7 @@ public class TextToVectorUpdateProcessorFactory extends
UpdateRequestProcessorFa
final SchemaField outputFieldSchema = latestSchema.getField(outputField);
assertIsDenseVectorField(outputFieldSchema);
- ManagedTextToVectorModelStore modelStore =
- ManagedTextToVectorModelStore.getManagedModelStore(req.getCore());
+ TextToVectorModelStore modelStore =
TextToVectorModelStore.getManagedModelStore(req.getCore());
SolrTextToVectorModel textToVector = modelStore.getModel(modelName);
if (textToVector == null) {
throw new SolrException(
@@ -113,7 +112,7 @@ public class TextToVectorUpdateProcessorFactory extends
UpdateRequestProcessorFa
"The model configured in the Update Request Processor '"
+ modelName
+ "' can't be found in the store: "
- + ManagedTextToVectorModelStore.REST_END_POINT);
+ + TextToVectorModelStore.REST_END_POINT);
}
return new TextToVectorUpdateProcessor(inputField, outputField,
textToVector, req, next);
diff --git
a/solr/modules/language-models/src/test/org/apache/solr/languagemodels/TestLanguageModelBase.java
b/solr/modules/language-models/src/test/org/apache/solr/languagemodels/TestLanguageModelBase.java
index f555f2e3b97..433d019a076 100644
---
a/solr/modules/language-models/src/test/org/apache/solr/languagemodels/TestLanguageModelBase.java
+++
b/solr/modules/language-models/src/test/org/apache/solr/languagemodels/TestLanguageModelBase.java
@@ -26,7 +26,7 @@ import java.util.Arrays;
import java.util.List;
import org.apache.commons.io.file.PathUtils;
import org.apache.solr.common.SolrInputDocument;
-import org.apache.solr.languagemodels.store.rest.ManagedTextToVectorModelStore;
+import org.apache.solr.languagemodels.store.rest.TextToVectorModelStore;
import org.apache.solr.util.RestTestBase;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -62,17 +62,17 @@ public class TestLanguageModelBase extends RestTestBase {
tmpSolrHome = createTempDir();
tmpConfDir = tmpSolrHome.resolve(CONF_DIR);
PathUtils.copyDirectory(TEST_PATH(), tmpSolrHome.toAbsolutePath());
- final Path textToVectorStore =
tmpConfDir.resolve(TEXT_TO_VECTOR_MODEL_FILE_NAME);
+ final Path textToVectorModelStore =
tmpConfDir.resolve(TEXT_TO_VECTOR_MODEL_FILE_NAME);
if (isPersistent) {
- textToVectorModelStoreFile = textToVectorStore;
+ textToVectorModelStoreFile = textToVectorModelStore;
}
- if (Files.exists(textToVectorStore)) {
+ if (Files.exists(textToVectorModelStore)) {
if (log.isInfoEnabled()) {
- log.info("remove model store config file in {}",
textToVectorStore.toAbsolutePath());
+ log.info("remove model store config file in {}",
textToVectorModelStore.toAbsolutePath());
}
- Files.delete(textToVectorStore);
+ Files.delete(textToVectorModelStore);
}
System.setProperty("managed.schema.mutable", "true");
@@ -87,24 +87,21 @@ public class TestLanguageModelBase extends RestTestBase {
}
}
- public static void loadModel(String fileName, String status) throws
Exception {
+ public static void loadTextToVectorModel(String fileName, String status)
throws Exception {
final URL url =
TestLanguageModelBase.class.getResource("/textToVectorModelExamples/"
+ fileName);
final String multipleModels = Files.readString(Path.of(url.toURI()),
StandardCharsets.UTF_8);
assertJPut(
- ManagedTextToVectorModelStore.REST_END_POINT,
- multipleModels,
- "/responseHeader/status==" + status);
+ TextToVectorModelStore.REST_END_POINT, multipleModels,
"/responseHeader/status==" + status);
}
- public static void loadModel(String fileName) throws Exception {
+ public static void loadTextToVectorModel(String fileName) throws Exception {
final URL url =
TestLanguageModelBase.class.getResource("/textToVectorModelExamples/"
+ fileName);
final String multipleModels = Files.readString(Path.of(url.toURI()),
StandardCharsets.UTF_8);
- assertJPut(
- ManagedTextToVectorModelStore.REST_END_POINT, multipleModels,
"/responseHeader/status==0");
+ assertJPut(TextToVectorModelStore.REST_END_POINT, multipleModels,
"/responseHeader/status==0");
}
protected static void prepareIndex() throws Exception {
diff --git
a/solr/modules/language-models/src/test/org/apache/solr/languagemodels/search/TextToVectorQParserTest.java
b/solr/modules/language-models/src/test/org/apache/solr/languagemodels/search/TextToVectorQParserTest.java
index 3f0b0a1f0c6..ee58c8d1bd3 100644
---
a/solr/modules/language-models/src/test/org/apache/solr/languagemodels/search/TextToVectorQParserTest.java
+++
b/solr/modules/language-models/src/test/org/apache/solr/languagemodels/search/TextToVectorQParserTest.java
@@ -28,7 +28,7 @@ public class TextToVectorQParserTest extends
TestLanguageModelBase {
@BeforeClass
public static void init() throws Exception {
setupTest("solrconfig-language-models.xml", "schema-language-models.xml",
true, false);
- loadModel("dummy-model.json");
+ loadTextToVectorModel("dummy-model.json");
}
@AfterClass
diff --git
a/solr/modules/language-models/src/test/org/apache/solr/languagemodels/store/rest/TestModelManagerPersistence.java
b/solr/modules/language-models/src/test/org/apache/solr/languagemodels/store/rest/TestModelManagerPersistence.java
deleted file mode 100644
index 21f8ba4b6dc..00000000000
---
a/solr/modules/language-models/src/test/org/apache/solr/languagemodels/store/rest/TestModelManagerPersistence.java
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.solr.languagemodels.store.rest;
-
-import org.apache.solr.languagemodels.TestLanguageModelBase;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-
-public class TestModelManagerPersistence extends TestLanguageModelBase {
-
- @Before
- public void init() throws Exception {
- setupTest("solrconfig-language-models.xml", "schema-language-models.xml",
false, true);
- }
-
- @After
- public void cleanup() throws Exception {
- afterTest();
- }
-
- @Test
- public void testModelStorePersistence() throws Exception {
- // check models are empty
- assertJQ(ManagedTextToVectorModelStore.REST_END_POINT, "/models/==[]");
-
- // load models and features from files
- loadModel("cohere-model.json");
-
- final String modelName = "cohere-1";
- assertJQ(ManagedTextToVectorModelStore.REST_END_POINT,
"/models/[0]/name=='" + modelName + "'");
- assertJQ(
- ManagedTextToVectorModelStore.REST_END_POINT,
- "/models/[0]/params/baseUrl=='https://api.cohere.ai/v1/'");
- assertJQ(
- ManagedTextToVectorModelStore.REST_END_POINT,
"/models/[0]/params/apiKey=='apiKey-cohere'");
- assertJQ(
- ManagedTextToVectorModelStore.REST_END_POINT,
- "/models/[0]/params/modelName=='embed-english-light-v3.0'");
- assertJQ(
- ManagedTextToVectorModelStore.REST_END_POINT,
- "/models/[0]/params/inputType=='search_document'");
- assertJQ(ManagedTextToVectorModelStore.REST_END_POINT,
"/models/[0]/params/timeout==60");
- assertJQ(ManagedTextToVectorModelStore.REST_END_POINT,
"/models/[0]/params/logRequests==true");
- assertJQ(ManagedTextToVectorModelStore.REST_END_POINT,
"/models/[0]/params/logResponses==true");
-
- // check persistence after reload
- restTestHarness.reload();
- assertJQ(ManagedTextToVectorModelStore.REST_END_POINT,
"/models/[0]/name=='" + modelName + "'");
- assertJQ(
- ManagedTextToVectorModelStore.REST_END_POINT,
- "/models/[0]/params/baseUrl=='https://api.cohere.ai/v1/'");
- assertJQ(
- ManagedTextToVectorModelStore.REST_END_POINT,
"/models/[0]/params/apiKey=='apiKey-cohere'");
- assertJQ(
- ManagedTextToVectorModelStore.REST_END_POINT,
- "/models/[0]/params/modelName=='embed-english-light-v3.0'");
- assertJQ(
- ManagedTextToVectorModelStore.REST_END_POINT,
- "/models/[0]/params/inputType=='search_document'");
- assertJQ(ManagedTextToVectorModelStore.REST_END_POINT,
"/models/[0]/params/timeout==60");
- assertJQ(ManagedTextToVectorModelStore.REST_END_POINT,
"/models/[0]/params/logRequests==true");
- assertJQ(ManagedTextToVectorModelStore.REST_END_POINT,
"/models/[0]/params/logResponses==true");
-
- // check persistence after restart
- restartJetty();
- assertJQ(ManagedTextToVectorModelStore.REST_END_POINT,
"/models/[0]/name=='" + modelName + "'");
- assertJQ(
- ManagedTextToVectorModelStore.REST_END_POINT,
- "/models/[0]/params/baseUrl=='https://api.cohere.ai/v1/'");
- assertJQ(
- ManagedTextToVectorModelStore.REST_END_POINT,
"/models/[0]/params/apiKey=='apiKey-cohere'");
- assertJQ(
- ManagedTextToVectorModelStore.REST_END_POINT,
- "/models/[0]/params/modelName=='embed-english-light-v3.0'");
- assertJQ(
- ManagedTextToVectorModelStore.REST_END_POINT,
- "/models/[0]/params/inputType=='search_document'");
- assertJQ(ManagedTextToVectorModelStore.REST_END_POINT,
"/models/[0]/params/timeout==60");
- assertJQ(ManagedTextToVectorModelStore.REST_END_POINT,
"/models/[0]/params/logRequests==true");
- assertJQ(ManagedTextToVectorModelStore.REST_END_POINT,
"/models/[0]/params/logResponses==true");
-
- // delete loaded models and features
- restTestHarness.delete(ManagedTextToVectorModelStore.REST_END_POINT + "/"
+ modelName);
- assertJQ(ManagedTextToVectorModelStore.REST_END_POINT, "/models/==[]");
-
- // check persistence after reload
- restTestHarness.reload();
- assertJQ(ManagedTextToVectorModelStore.REST_END_POINT, "/models/==[]");
-
- // check persistence after restart
- restartJetty();
- assertJQ(ManagedTextToVectorModelStore.REST_END_POINT, "/models/==[]");
- }
-}
diff --git
a/solr/modules/language-models/src/test/org/apache/solr/languagemodels/store/rest/TestModelManager.java
b/solr/modules/language-models/src/test/org/apache/solr/languagemodels/store/rest/TestTextToVectorModelManager.java
similarity index 50%
rename from
solr/modules/language-models/src/test/org/apache/solr/languagemodels/store/rest/TestModelManager.java
rename to
solr/modules/language-models/src/test/org/apache/solr/languagemodels/store/rest/TestTextToVectorModelManager.java
index b3dd51a5944..0dba83a8d97 100644
---
a/solr/modules/language-models/src/test/org/apache/solr/languagemodels/store/rest/TestModelManager.java
+++
b/solr/modules/language-models/src/test/org/apache/solr/languagemodels/store/rest/TestTextToVectorModelManager.java
@@ -27,7 +27,7 @@ import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
-public class TestModelManager extends TestLanguageModelBase {
+public class TestTextToVectorModelManager extends TestLanguageModelBase {
@BeforeClass
public static void init() throws Exception {
@@ -49,7 +49,7 @@ public class TestModelManager extends TestLanguageModelBase {
final String resourceId = "/schema/mstore1";
registry.registerManagedResource(
- resourceId, ManagedTextToVectorModelStore.class, new
TextToVectorQParserPlugin());
+ resourceId, TextToVectorModelStore.class, new
TextToVectorQParserPlugin());
final NamedList<String> initArgs = new NamedList<>();
@@ -57,7 +57,7 @@ public class TestModelManager extends TestLanguageModelBase {
restManager.init(loader, initArgs, new
ManagedResourceStorage.InMemoryStorageIO());
final ManagedResource res = restManager.getManagedResource(resourceId);
- assertTrue(res instanceof ManagedTextToVectorModelStore);
+ assertTrue(res instanceof TextToVectorModelStore);
assertEquals(res.getResourceId(), resourceId);
}
@@ -70,7 +70,7 @@ public class TestModelManager extends TestLanguageModelBase {
// Add models
String model = "{ \"name\":\"testModel1\", \"class\":\"" +
cohereModelClassName + "\"}";
// fails since it does not have params
- assertJPut(ManagedTextToVectorModelStore.REST_END_POINT, model,
"/responseHeader/status==400");
+ assertJPut(TextToVectorModelStore.REST_END_POINT, model,
"/responseHeader/status==400");
// success
model =
"{ name:\"testModel2\", class:\""
@@ -84,7 +84,7 @@ public class TestModelManager extends TestLanguageModelBase {
+ "logRequests:true,"
+ "logResponses:false"
+ "}}";
- assertJPut(ManagedTextToVectorModelStore.REST_END_POINT, model,
"/responseHeader/status==0");
+ assertJPut(TextToVectorModelStore.REST_END_POINT, model,
"/responseHeader/status==0");
// success
final String multipleModels =
"[{ name:\"testModel3\", class:\""
@@ -107,122 +107,116 @@ public class TestModelManager extends
TestLanguageModelBase {
+ "logRequests:true,"
+ "logResponses:false"
+ "}}]";
- assertJPut(
- ManagedTextToVectorModelStore.REST_END_POINT, multipleModels,
"/responseHeader/status==0");
- final String qryResult = JQ(ManagedTextToVectorModelStore.REST_END_POINT);
+ assertJPut(TextToVectorModelStore.REST_END_POINT, multipleModels,
"/responseHeader/status==0");
+ final String qryResult = JQ(TextToVectorModelStore.REST_END_POINT);
assertTrue(
qryResult.contains("\"name\":\"testModel2\"")
&& qryResult.contains("\"name\":\"testModel3\"")
&& qryResult.contains("\"name\":\"testModel4\""));
- assertJQ(ManagedTextToVectorModelStore.REST_END_POINT,
"/models/[0]/name=='testModel2'");
- assertJQ(ManagedTextToVectorModelStore.REST_END_POINT,
"/models/[1]/name=='testModel3'");
- assertJQ(ManagedTextToVectorModelStore.REST_END_POINT,
"/models/[2]/name=='testModel4'");
- restTestHarness.delete(ManagedTextToVectorModelStore.REST_END_POINT +
"/testModel2");
- restTestHarness.delete(ManagedTextToVectorModelStore.REST_END_POINT +
"/testModel3");
- restTestHarness.delete(ManagedTextToVectorModelStore.REST_END_POINT +
"/testModel4");
- assertJQ(ManagedTextToVectorModelStore.REST_END_POINT, "/models==[]'");
+ assertJQ(TextToVectorModelStore.REST_END_POINT,
"/models/[0]/name=='testModel2'");
+ assertJQ(TextToVectorModelStore.REST_END_POINT,
"/models/[1]/name=='testModel3'");
+ assertJQ(TextToVectorModelStore.REST_END_POINT,
"/models/[2]/name=='testModel4'");
+ restTestHarness.delete(TextToVectorModelStore.REST_END_POINT +
"/testModel2");
+ restTestHarness.delete(TextToVectorModelStore.REST_END_POINT +
"/testModel3");
+ restTestHarness.delete(TextToVectorModelStore.REST_END_POINT +
"/testModel4");
+ assertJQ(TextToVectorModelStore.REST_END_POINT, "/models==[]'");
}
@Test
- public void loadModel_cohere_shouldLoadModelConfig() throws Exception {
- loadModel("cohere-model.json");
+ public void loadTextToVectorModel_cohere_shouldLoadModelConfig() throws
Exception {
+ loadTextToVectorModel("cohere-model.json");
final String modelName = "cohere-1";
- assertJQ(ManagedTextToVectorModelStore.REST_END_POINT,
"/models/[0]/name=='" + modelName + "'");
+ assertJQ(TextToVectorModelStore.REST_END_POINT, "/models/[0]/name=='" +
modelName + "'");
assertJQ(
- ManagedTextToVectorModelStore.REST_END_POINT,
+ TextToVectorModelStore.REST_END_POINT,
"/models/[0]/params/baseUrl=='https://api.cohere.ai/v1/'");
+ assertJQ(TextToVectorModelStore.REST_END_POINT,
"/models/[0]/params/apiKey=='apiKey-cohere'");
assertJQ(
- ManagedTextToVectorModelStore.REST_END_POINT,
"/models/[0]/params/apiKey=='apiKey-cohere'");
- assertJQ(
- ManagedTextToVectorModelStore.REST_END_POINT,
+ TextToVectorModelStore.REST_END_POINT,
"/models/[0]/params/modelName=='embed-english-light-v3.0'");
assertJQ(
- ManagedTextToVectorModelStore.REST_END_POINT,
- "/models/[0]/params/inputType=='search_document'");
- assertJQ(ManagedTextToVectorModelStore.REST_END_POINT,
"/models/[0]/params/timeout==60");
- assertJQ(ManagedTextToVectorModelStore.REST_END_POINT,
"/models/[0]/params/logRequests==true");
- assertJQ(ManagedTextToVectorModelStore.REST_END_POINT,
"/models/[0]/params/logResponses==true");
+ TextToVectorModelStore.REST_END_POINT,
"/models/[0]/params/inputType=='search_document'");
+ assertJQ(TextToVectorModelStore.REST_END_POINT,
"/models/[0]/params/timeout==60");
+ assertJQ(TextToVectorModelStore.REST_END_POINT,
"/models/[0]/params/logRequests==true");
+ assertJQ(TextToVectorModelStore.REST_END_POINT,
"/models/[0]/params/logResponses==true");
- restTestHarness.delete(ManagedTextToVectorModelStore.REST_END_POINT + "/"
+ modelName);
+ restTestHarness.delete(TextToVectorModelStore.REST_END_POINT + "/" +
modelName);
}
@Test
- public void loadModel_openAi_shouldLoadModelConfig() throws Exception {
- loadModel("openai-model.json");
+ public void loadTextToVectorModel_openAi_shouldLoadModelConfig() throws
Exception {
+ loadTextToVectorModel("openai-model.json");
final String modelName = "openai-1";
- assertJQ(ManagedTextToVectorModelStore.REST_END_POINT,
"/models/[0]/name=='" + modelName + "'");
+ assertJQ(TextToVectorModelStore.REST_END_POINT, "/models/[0]/name=='" +
modelName + "'");
assertJQ(
- ManagedTextToVectorModelStore.REST_END_POINT,
+ TextToVectorModelStore.REST_END_POINT,
"/models/[0]/params/baseUrl=='https://api.openai.com/v1'");
+ assertJQ(TextToVectorModelStore.REST_END_POINT,
"/models/[0]/params/apiKey=='apiKey-openAI'");
assertJQ(
- ManagedTextToVectorModelStore.REST_END_POINT,
"/models/[0]/params/apiKey=='apiKey-openAI'");
- assertJQ(
- ManagedTextToVectorModelStore.REST_END_POINT,
+ TextToVectorModelStore.REST_END_POINT,
"/models/[0]/params/modelName=='text-embedding-3-small'");
- assertJQ(ManagedTextToVectorModelStore.REST_END_POINT,
"/models/[0]/params/timeout==60");
- assertJQ(ManagedTextToVectorModelStore.REST_END_POINT,
"/models/[0]/params/logRequests==true");
- assertJQ(ManagedTextToVectorModelStore.REST_END_POINT,
"/models/[0]/params/logResponses==true");
- assertJQ(ManagedTextToVectorModelStore.REST_END_POINT,
"/models/[0]/params/maxRetries==5");
+ assertJQ(TextToVectorModelStore.REST_END_POINT,
"/models/[0]/params/timeout==60");
+ assertJQ(TextToVectorModelStore.REST_END_POINT,
"/models/[0]/params/logRequests==true");
+ assertJQ(TextToVectorModelStore.REST_END_POINT,
"/models/[0]/params/logResponses==true");
+ assertJQ(TextToVectorModelStore.REST_END_POINT,
"/models/[0]/params/maxRetries==5");
- restTestHarness.delete(ManagedTextToVectorModelStore.REST_END_POINT + "/"
+ modelName);
+ restTestHarness.delete(TextToVectorModelStore.REST_END_POINT + "/" +
modelName);
}
@Test
- public void loadModel_mistralAi_shouldLoadModelConfig() throws Exception {
- loadModel("mistralai-model.json");
+ public void loadTextToVectorModel_mistralAi_shouldLoadModelConfig() throws
Exception {
+ loadTextToVectorModel("mistralai-model.json");
final String modelName = "mistralai-1";
- assertJQ(ManagedTextToVectorModelStore.REST_END_POINT,
"/models/[0]/name=='" + modelName + "'");
+ assertJQ(TextToVectorModelStore.REST_END_POINT, "/models/[0]/name=='" +
modelName + "'");
assertJQ(
- ManagedTextToVectorModelStore.REST_END_POINT,
+ TextToVectorModelStore.REST_END_POINT,
"/models/[0]/params/baseUrl=='https://api.mistral.ai/v1'");
assertJQ(
- ManagedTextToVectorModelStore.REST_END_POINT,
- "/models/[0]/params/apiKey=='apiKey-mistralAI'");
+ TextToVectorModelStore.REST_END_POINT,
"/models/[0]/params/apiKey=='apiKey-mistralAI'");
assertJQ(
- ManagedTextToVectorModelStore.REST_END_POINT,
- "/models/[0]/params/modelName=='mistral-embed'");
- assertJQ(ManagedTextToVectorModelStore.REST_END_POINT,
"/models/[0]/params/timeout==60");
- assertJQ(ManagedTextToVectorModelStore.REST_END_POINT,
"/models/[0]/params/logRequests==true");
- assertJQ(ManagedTextToVectorModelStore.REST_END_POINT,
"/models/[0]/params/logResponses==true");
- assertJQ(ManagedTextToVectorModelStore.REST_END_POINT,
"/models/[0]/params/maxRetries==5");
-
- restTestHarness.delete(ManagedTextToVectorModelStore.REST_END_POINT + "/"
+ modelName);
+ TextToVectorModelStore.REST_END_POINT,
"/models/[0]/params/modelName=='mistral-embed'");
+ assertJQ(TextToVectorModelStore.REST_END_POINT,
"/models/[0]/params/timeout==60");
+ assertJQ(TextToVectorModelStore.REST_END_POINT,
"/models/[0]/params/logRequests==true");
+ assertJQ(TextToVectorModelStore.REST_END_POINT,
"/models/[0]/params/logResponses==true");
+ assertJQ(TextToVectorModelStore.REST_END_POINT,
"/models/[0]/params/maxRetries==5");
+
+ restTestHarness.delete(TextToVectorModelStore.REST_END_POINT + "/" +
modelName);
}
@Test
- public void loadModel_huggingface_shouldLoadModelConfig() throws Exception {
- loadModel("huggingface-model.json");
+ public void loadTextToVectorModel_huggingface_shouldLoadModelConfig() throws
Exception {
+ loadTextToVectorModel("huggingface-model.json");
final String modelName = "huggingface-1";
- assertJQ(ManagedTextToVectorModelStore.REST_END_POINT,
"/models/[0]/name=='" + modelName + "'");
+ assertJQ(TextToVectorModelStore.REST_END_POINT, "/models/[0]/name=='" +
modelName + "'");
assertJQ(
- ManagedTextToVectorModelStore.REST_END_POINT,
+ TextToVectorModelStore.REST_END_POINT,
"/models/[0]/params/accessToken=='apiKey-huggingface'");
assertJQ(
- ManagedTextToVectorModelStore.REST_END_POINT,
+ TextToVectorModelStore.REST_END_POINT,
"/models/[0]/params/modelId=='sentence-transformers/all-MiniLM-L6-v2'");
- restTestHarness.delete(ManagedTextToVectorModelStore.REST_END_POINT + "/"
+ modelName);
+ restTestHarness.delete(TextToVectorModelStore.REST_END_POINT + "/" +
modelName);
}
@Test
- public void loadModel_dummyUnsupportedParam_shouldRaiseError() throws
Exception {
- loadModel("dummy-model-unsupported.json", "400");
+ public void loadTextToVectorModel_dummyUnsupportedParam_shouldRaiseError()
throws Exception {
+ loadTextToVectorModel("dummy-model-unsupported.json", "400");
}
@Test
- public void loadModel_dummyAmbiguousParam_shouldDefaultToString() throws
Exception {
- loadModel("dummy-model-ambiguous.json");
+ public void
loadTextToVectorModel_dummyAmbiguousParam_shouldDefaultToString() throws
Exception {
+ loadTextToVectorModel("dummy-model-ambiguous.json");
final String modelName = "dummy-1";
- assertJQ(ManagedTextToVectorModelStore.REST_END_POINT,
"/models/[0]/name=='" + modelName + "'");
- assertJQ(ManagedTextToVectorModelStore.REST_END_POINT,
"/models/[0]/params/ambiguous==10");
+ assertJQ(TextToVectorModelStore.REST_END_POINT, "/models/[0]/name=='" +
modelName + "'");
+ assertJQ(TextToVectorModelStore.REST_END_POINT,
"/models/[0]/params/ambiguous==10");
- restTestHarness.delete(ManagedTextToVectorModelStore.REST_END_POINT + "/"
+ modelName);
+ restTestHarness.delete(TextToVectorModelStore.REST_END_POINT + "/" +
modelName);
}
}
diff --git
a/solr/modules/language-models/src/test/org/apache/solr/languagemodels/store/rest/TestTextToVectorModelManagerPersistence.java
b/solr/modules/language-models/src/test/org/apache/solr/languagemodels/store/rest/TestTextToVectorModelManagerPersistence.java
new file mode 100644
index 00000000000..5a5189408ef
--- /dev/null
+++
b/solr/modules/language-models/src/test/org/apache/solr/languagemodels/store/rest/TestTextToVectorModelManagerPersistence.java
@@ -0,0 +1,103 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.solr.languagemodels.store.rest;
+
+import org.apache.solr.languagemodels.TestLanguageModelBase;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+public class TestTextToVectorModelManagerPersistence extends
TestLanguageModelBase {
+
+ @Before
+ public void init() throws Exception {
+ setupTest("solrconfig-language-models.xml", "schema-language-models.xml",
false, true);
+ }
+
+ @After
+ public void cleanup() throws Exception {
+ afterTest();
+ }
+
+ @Test
+ public void testTextToVectorModelStorePersistence() throws Exception {
+ // check models are empty
+ assertJQ(TextToVectorModelStore.REST_END_POINT, "/models/==[]");
+
+ // load models and features from files
+ loadTextToVectorModel("cohere-model.json");
+
+ final String modelName = "cohere-1";
+ assertJQ(TextToVectorModelStore.REST_END_POINT, "/models/[0]/name=='" +
modelName + "'");
+ assertJQ(
+ TextToVectorModelStore.REST_END_POINT,
+ "/models/[0]/params/baseUrl=='https://api.cohere.ai/v1/'");
+ assertJQ(TextToVectorModelStore.REST_END_POINT,
"/models/[0]/params/apiKey=='apiKey-cohere'");
+ assertJQ(
+ TextToVectorModelStore.REST_END_POINT,
+ "/models/[0]/params/modelName=='embed-english-light-v3.0'");
+ assertJQ(
+ TextToVectorModelStore.REST_END_POINT,
"/models/[0]/params/inputType=='search_document'");
+ assertJQ(TextToVectorModelStore.REST_END_POINT,
"/models/[0]/params/timeout==60");
+ assertJQ(TextToVectorModelStore.REST_END_POINT,
"/models/[0]/params/logRequests==true");
+ assertJQ(TextToVectorModelStore.REST_END_POINT,
"/models/[0]/params/logResponses==true");
+
+ // check persistence after reload
+ restTestHarness.reload();
+ assertJQ(TextToVectorModelStore.REST_END_POINT, "/models/[0]/name=='" +
modelName + "'");
+ assertJQ(
+ TextToVectorModelStore.REST_END_POINT,
+ "/models/[0]/params/baseUrl=='https://api.cohere.ai/v1/'");
+ assertJQ(TextToVectorModelStore.REST_END_POINT,
"/models/[0]/params/apiKey=='apiKey-cohere'");
+ assertJQ(
+ TextToVectorModelStore.REST_END_POINT,
+ "/models/[0]/params/modelName=='embed-english-light-v3.0'");
+ assertJQ(
+ TextToVectorModelStore.REST_END_POINT,
"/models/[0]/params/inputType=='search_document'");
+ assertJQ(TextToVectorModelStore.REST_END_POINT,
"/models/[0]/params/timeout==60");
+ assertJQ(TextToVectorModelStore.REST_END_POINT,
"/models/[0]/params/logRequests==true");
+ assertJQ(TextToVectorModelStore.REST_END_POINT,
"/models/[0]/params/logResponses==true");
+
+ // check persistence after restart
+ restartJetty();
+ assertJQ(TextToVectorModelStore.REST_END_POINT, "/models/[0]/name=='" +
modelName + "'");
+ assertJQ(
+ TextToVectorModelStore.REST_END_POINT,
+ "/models/[0]/params/baseUrl=='https://api.cohere.ai/v1/'");
+ assertJQ(TextToVectorModelStore.REST_END_POINT,
"/models/[0]/params/apiKey=='apiKey-cohere'");
+ assertJQ(
+ TextToVectorModelStore.REST_END_POINT,
+ "/models/[0]/params/modelName=='embed-english-light-v3.0'");
+ assertJQ(
+ TextToVectorModelStore.REST_END_POINT,
"/models/[0]/params/inputType=='search_document'");
+ assertJQ(TextToVectorModelStore.REST_END_POINT,
"/models/[0]/params/timeout==60");
+ assertJQ(TextToVectorModelStore.REST_END_POINT,
"/models/[0]/params/logRequests==true");
+ assertJQ(TextToVectorModelStore.REST_END_POINT,
"/models/[0]/params/logResponses==true");
+
+ // delete loaded models and features
+ restTestHarness.delete(TextToVectorModelStore.REST_END_POINT + "/" +
modelName);
+ assertJQ(TextToVectorModelStore.REST_END_POINT, "/models/==[]");
+
+ // check persistence after reload
+ restTestHarness.reload();
+ assertJQ(TextToVectorModelStore.REST_END_POINT, "/models/==[]");
+
+ // check persistence after restart
+ restartJetty();
+ assertJQ(TextToVectorModelStore.REST_END_POINT, "/models/==[]");
+ }
+}
diff --git
a/solr/modules/language-models/src/test/org/apache/solr/languagemodels/store/rest/TestManagedLanguageModelStoreInitialization.java
b/solr/modules/language-models/src/test/org/apache/solr/languagemodels/store/rest/TestTextToVectorModelStoreInitialization.java
similarity index 67%
rename from
solr/modules/language-models/src/test/org/apache/solr/languagemodels/store/rest/TestManagedLanguageModelStoreInitialization.java
rename to
solr/modules/language-models/src/test/org/apache/solr/languagemodels/store/rest/TestTextToVectorModelStoreInitialization.java
index 4b414a18de6..5a51375e4f4 100644
---
a/solr/modules/language-models/src/test/org/apache/solr/languagemodels/store/rest/TestManagedLanguageModelStoreInitialization.java
+++
b/solr/modules/language-models/src/test/org/apache/solr/languagemodels/store/rest/TestTextToVectorModelStoreInitialization.java
@@ -20,7 +20,7 @@ import org.apache.solr.languagemodels.TestLanguageModelBase;
import org.junit.After;
import org.junit.Test;
-public class TestManagedLanguageModelStoreInitialization extends
TestLanguageModelBase {
+public class TestTextToVectorModelStoreInitialization extends
TestLanguageModelBase {
@After
public void cleanUp() throws Exception {
@@ -28,7 +28,7 @@ public class TestManagedLanguageModelStoreInitialization
extends TestLanguageMod
}
@Test
- public void
managedModelStore_whenUpdateRequestComponentConfigured_shouldBeInitialized()
+ public void
textToVectorModelStore_whenUpdateRequestComponentConfigured_shouldBeInitialized()
throws Exception {
setupTest(
"solrconfig-language-models-update-request-processor-only.xml",
@@ -36,12 +36,12 @@ public class TestManagedLanguageModelStoreInitialization
extends TestLanguageMod
false,
false);
- assertJQ(ManagedTextToVectorModelStore.REST_END_POINT,
"/responseHeader/status==0");
- assertJQ(ManagedTextToVectorModelStore.REST_END_POINT, "/models==[]");
+ assertJQ(TextToVectorModelStore.REST_END_POINT,
"/responseHeader/status==0");
+ assertJQ(TextToVectorModelStore.REST_END_POINT, "/models==[]");
}
@Test
- public void
managedModelStore_whenQueryParserComponentConfigured_shouldBeInitialized()
+ public void
textToVectorModelStore_whenQueryParserComponentConfigured_shouldBeInitialized()
throws Exception {
setupTest(
"solrconfig-language-models-query-parser-only.xml",
@@ -49,19 +49,19 @@ public class TestManagedLanguageModelStoreInitialization
extends TestLanguageMod
false,
false);
- assertJQ(ManagedTextToVectorModelStore.REST_END_POINT,
"/responseHeader/status==0");
- assertJQ(ManagedTextToVectorModelStore.REST_END_POINT, "/models==[]");
+ assertJQ(TextToVectorModelStore.REST_END_POINT,
"/responseHeader/status==0");
+ assertJQ(TextToVectorModelStore.REST_END_POINT, "/models==[]");
}
@Test
- public void managedModelStore_whenNoComponents_shouldNotBeInitialized()
throws Exception {
+ public void textToVectorModelStore_whenNoComponents_shouldNotBeInitialized()
throws Exception {
setupTest(
"solrconfig-language-models-no-components.xml",
"schema-language-models.xml", false, false);
assertJQ(
- ManagedTextToVectorModelStore.REST_END_POINT,
+ TextToVectorModelStore.REST_END_POINT,
"/responseHeader/status==400",
"/error/msg=='No REST managed resource registered for path "
- + ManagedTextToVectorModelStore.REST_END_POINT
+ + TextToVectorModelStore.REST_END_POINT
+ "'");
}
}
diff --git
a/solr/modules/language-models/src/test/org/apache/solr/languagemodels/update/processor/TextToVectorUpdateProcessorTest.java
b/solr/modules/language-models/src/test/org/apache/solr/languagemodels/update/processor/TextToVectorUpdateProcessorTest.java
index 75a9f206f14..2b948786d2a 100644
---
a/solr/modules/language-models/src/test/org/apache/solr/languagemodels/update/processor/TextToVectorUpdateProcessorTest.java
+++
b/solr/modules/language-models/src/test/org/apache/solr/languagemodels/update/processor/TextToVectorUpdateProcessorTest.java
@@ -24,7 +24,7 @@ import org.apache.solr.client.solrj.request.SolrQuery;
import org.apache.solr.client.solrj.request.UpdateRequest;
import org.apache.solr.common.SolrInputDocument;
import org.apache.solr.languagemodels.TestLanguageModelBase;
-import org.apache.solr.languagemodels.store.rest.ManagedTextToVectorModelStore;
+import org.apache.solr.languagemodels.store.rest.TextToVectorModelStore;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.BeforeClass;
@@ -44,14 +44,14 @@ public class TextToVectorUpdateProcessorTest extends
TestLanguageModelBase {
@After
public void afterEachTest() throws Exception {
- restTestHarness.delete(ManagedTextToVectorModelStore.REST_END_POINT +
"/dummy-1");
+ restTestHarness.delete(TextToVectorModelStore.REST_END_POINT + "/dummy-1");
restTestHarness.delete(
- ManagedTextToVectorModelStore.REST_END_POINT +
"/exception-throwing-model"); // clean
+ TextToVectorModelStore.REST_END_POINT + "/exception-throwing-model");
// clean
}
@Test
public void processAdd_inputField_shouldVectoriseInputField() throws
Exception {
- loadModel("dummy-model.json"); // preparation
+ loadTextToVectorModel("dummy-model.json"); // preparation
addWithChain(sdoc("id", "99", "_text_", "Vegeta is the saiyan prince."),
"textToVector");
addWithChain(
@@ -69,7 +69,7 @@ public class TextToVectorUpdateProcessorTest extends
TestLanguageModelBase {
"/response/docs/[1]/id=='98'",
"/response/docs/[1]/vector==[1.0, 2.0, 3.0, 4.0]");
- restTestHarness.delete(ManagedTextToVectorModelStore.REST_END_POINT +
"/dummy-1"); // clean up
+ restTestHarness.delete(TextToVectorModelStore.REST_END_POINT +
"/dummy-1"); // clean up
}
private SolrQuery getSolrQuery() {
@@ -102,7 +102,7 @@ public class TextToVectorUpdateProcessorTest extends
TestLanguageModelBase {
@Test
public void processAdd_emptyInputField_shouldLogAndIndexWithNoVector()
throws Exception {
- loadModel("dummy-model.json"); // preparation
+ loadTextToVectorModel("dummy-model.json"); // preparation
addWithChain(sdoc("id", "99", "_text_", ""), "textToVector");
addWithChain(sdoc("id", "98", "_text_", "Vegeta is the saiyan prince."),
"textToVector");
assertU(commit());
@@ -117,12 +117,12 @@ public class TextToVectorUpdateProcessorTest extends
TestLanguageModelBase {
"/response/docs/[1]/id=='98'",
"/response/docs/[1]/vector==[1.0, 2.0, 3.0, 4.0]");
- restTestHarness.delete(ManagedTextToVectorModelStore.REST_END_POINT +
"/dummy-1"); // clean up
+ restTestHarness.delete(TextToVectorModelStore.REST_END_POINT +
"/dummy-1"); // clean up
}
@Test
public void processAdd_nullInputField_shouldLogAndIndexWithNoVector() throws
Exception {
- loadModel("dummy-model.json"); // preparation
+ loadTextToVectorModel("dummy-model.json"); // preparation
addWithChain(sdoc("id", "99", "_text_", "Vegeta is the saiyan prince."),
"textToVector");
assertU(adoc("id", "98"));
assertU(commit());
@@ -137,12 +137,12 @@ public class TextToVectorUpdateProcessorTest extends
TestLanguageModelBase {
"/response/docs/[1]/id=='98'",
"!/response/docs/[1]/vector=="); // no vector field for the document 98
- restTestHarness.delete(ManagedTextToVectorModelStore.REST_END_POINT +
"/dummy-1"); // clean up
+ restTestHarness.delete(TextToVectorModelStore.REST_END_POINT +
"/dummy-1"); // clean up
}
@Test
public void processAdd_failingVectorisation_shouldLogAndIndexWithNoVector()
throws Exception {
- loadModel("exception-throwing-model.json"); // preparation
+ loadTextToVectorModel("exception-throwing-model.json"); // preparation
addWithChain(sdoc("id", "99", "_text_", "Vegeta is the saiyan prince."),
"failingTextToVector");
addWithChain(
sdoc("id", "98", "_text_", "Kakaroth is a saiyan grown up on planet
Earth."),
@@ -160,7 +160,7 @@ public class TextToVectorUpdateProcessorTest extends
TestLanguageModelBase {
"!/response/docs/[1]/vector=="); // no vector field for the document 98
restTestHarness.delete(
- ManagedTextToVectorModelStore.REST_END_POINT +
"/exception-throwing-model"); // clean up
+ TextToVectorModelStore.REST_END_POINT + "/exception-throwing-model");
// clean up
}
@Test
@@ -170,7 +170,7 @@ public class TextToVectorUpdateProcessorTest extends
TestLanguageModelBase {
// (i.e., the UpdateRequestProcessor is placed before the TextToVector
processor),
// the system correctly retrieves the stored value of the input field
(string_field)
// and generates the vector for the document.
- loadModel("dummy-model.json");
+ loadTextToVectorModel("dummy-model.json");
assertU(adoc("id", "99", "string_field", "Vegeta is the saiyan prince."));
assertU(adoc("id", "98", "string_field", "Kakaroth is a saiyan grown up on
planet Earth."));
assertU(commit());
@@ -192,7 +192,7 @@ public class TextToVectorUpdateProcessorTest extends
TestLanguageModelBase {
"/response/docs/[1]/id=='99'",
"/response/docs/[1]/vector==[1.0, 2.0, 3.0, 4.0]");
- restTestHarness.delete(ManagedTextToVectorModelStore.REST_END_POINT +
"/dummy-1");
+ restTestHarness.delete(TextToVectorModelStore.REST_END_POINT + "/dummy-1");
}
@Test
@@ -201,7 +201,7 @@ public class TextToVectorUpdateProcessorTest extends
TestLanguageModelBase {
// is
// modified using an atomic update, the vector is recomputed and replaces
the previous one. It
// ensures that the system does not append or merge vector values.
- loadModel("dummy-model.json");
+ loadTextToVectorModel("dummy-model.json");
addWithChain(
sdoc("id", "99", "string_field", "Vegeta is the saiyan prince."),
"textToVectorStoredInputField");
@@ -228,7 +228,7 @@ public class TextToVectorUpdateProcessorTest extends
TestLanguageModelBase {
"/response/docs/[1]/id=='98'",
"/response/docs/[1]/vector==[1.0, 2.0, 3.0, 4.0]");
- restTestHarness.delete(ManagedTextToVectorModelStore.REST_END_POINT +
"/dummy-1");
+ restTestHarness.delete(TextToVectorModelStore.REST_END_POINT + "/dummy-1");
}
void addWithChain(SolrInputDocument document, String updateChain)
diff --git
a/solr/modules/language-models/src/test/org/apache/solr/languagemodels/update/processor/factory/TextToVectorUpdateProcessorFactoryTest.java
b/solr/modules/language-models/src/test/org/apache/solr/languagemodels/update/processor/factory/TextToVectorUpdateProcessorFactoryTest.java
index 02617c64636..4c511aa9cc8 100644
---
a/solr/modules/language-models/src/test/org/apache/solr/languagemodels/update/processor/factory/TextToVectorUpdateProcessorFactoryTest.java
+++
b/solr/modules/language-models/src/test/org/apache/solr/languagemodels/update/processor/factory/TextToVectorUpdateProcessorFactoryTest.java
@@ -22,7 +22,7 @@ import org.apache.solr.common.util.NamedList;
import org.apache.solr.core.SolrCore;
import org.apache.solr.languagemodels.TestLanguageModelBase;
import org.apache.solr.languagemodels.model.SolrTextToVectorModel;
-import org.apache.solr.languagemodels.store.rest.ManagedTextToVectorModelStore;
+import org.apache.solr.languagemodels.store.rest.TextToVectorModelStore;
import org.apache.solr.request.SolrQueryRequestBase;
import org.apache.solr.update.processor.UpdateRequestProcessor;
import org.junit.After;
@@ -187,7 +187,7 @@ public class TextToVectorUpdateProcessorFactoryTest extends
TestLanguageModelBas
String inputFieldName, String outputFieldName, SolrCore collection1,
String modelName) {
NamedList<String> args = new NamedList<>();
- ManagedTextToVectorModelStore.getManagedModelStore(collection1)
+ TextToVectorModelStore.getManagedModelStore(collection1)
.addModel(new SolrTextToVectorModel(modelName, null, null));
args.add("inputField", inputFieldName);
args.add("outputField", outputFieldName);
diff --git a/solr/solr-ref-guide/modules/query-guide/pages/text-to-vector.adoc
b/solr/solr-ref-guide/modules/query-guide/pages/text-to-vector.adoc
index 7e3843230cf..5e04ac00085 100644
--- a/solr/solr-ref-guide/modules/query-guide/pages/text-to-vector.adoc
+++ b/solr/solr-ref-guide/modules/query-guide/pages/text-to-vector.adoc
@@ -292,8 +292,6 @@
http://localhost:8983/solr/techproducts/schema/text-to-vector-model-store
----
-Documentation Indexing time
-
=== Enriching documents with vectors at indexing time
To vectorise textual fields of your documents at indexing time you need to
configure an
{solr-javadocs}/core/org/apache/solr/update/processor/UpdateRequestProcessorChain.html[Update
Request Processor Chain] that includes at least one
`TextToVectorUpdateProcessor` update request processor (you can include more
than one, if you want to vectorise multiple fields):