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 000000000000..f74147d15203 --- /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/gradle/libs.versions.toml b/gradle/libs.versions.toml index 7018c17a31ec..d2d521b5692c 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -240,8 +240,8 @@ amazon-awssdk-s3 = { module = "software.amazon.awssdk:s3", version.ref = "amazon amazon-awssdk-sdkcore = { module = "software.amazon.awssdk:sdk-core", version.ref = "amazon-awssdk" } amazon-awssdk-sts = { module = "software.amazon.awssdk:sts", version.ref = "amazon-awssdk" } androidx-lifecycle-runtimeCompose = { module = "org.jetbrains.androidx.lifecycle:lifecycle-runtime-compose", version.ref = "androidx-lifecycle" } -androidx-lifecycle-viewmodelCompose = { module = "org.jetbrains.androidx.lifecycle:lifecycle-viewmodel-compose", version.ref = "androidx-lifecycle" } androidx-lifecycle-viewModelNav3 = { module = "org.jetbrains.androidx.lifecycle:lifecycle-viewmodel-navigation3", version.ref = "androidx-lifecycle" } +androidx-lifecycle-viewmodelCompose = { module = "org.jetbrains.androidx.lifecycle:lifecycle-viewmodel-compose", version.ref = "androidx-lifecycle" } androidx-material3-adaptive = { module = "org.jetbrains.compose.material3.adaptive:adaptive", version.ref = "androidx-adaptive" } androidx-material3-adaptive-nav3 = { module = "org.jetbrains.compose.material3.adaptive:adaptive-navigation3", version.ref = "androidx-adaptive" } androidx-navigation3-ui = { module = "org.jetbrains.androidx.navigation3:navigation3-ui", version.ref = "androidx-navigation3" } 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 cb34d7b621b0..9b171d2e51de 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.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 9cbfbf5dc1f4..01d7b0c05541 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.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 @@ 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 QParser createParser( @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 Query parse() throws SyntaxError { "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 d0f364062e7a..f9136a0f7242 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 @@ /** Managed Resource wrapper for the text-to-vector model store, exposed via REST */ @ThreadSafe -public class ManagedTextToVectorModelStore - extends ManagedLanguageModelStore { +public class TextToVectorModelStore extends ManagedLanguageModelStore { /** the model store rest endpoint */ public static final String REST_END_POINT = "/schema/text-to-vector-model-store"; @@ -38,11 +37,11 @@ public static void registerManagedTextToVectorModelStore( 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 @@ protected SolrTextToVectorModel fromModelMap( (Map) 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 f8c35906093c..68f2e17e85a9 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.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 @@ *

The parameters supported are: * *

- * <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 void init(final NamedList args) {
   @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 UpdateRequestProcessor getInstance(
     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 UpdateRequestProcessor getInstance(
           "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 f555f2e3b973..433d019a0763 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.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 @@ protected static void initFolders(boolean isPersistent) throws Exception {
     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 @@ protected static void afterTest() throws Exception {
     }
   }
 
-  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 3f0b0a1f0c6d..ee58c8d1bd3d 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 21f8ba4b6dc9..000000000000
--- 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 b3dd51a59445..0dba83a8d97b 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.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 void test() throws Exception {
 
     final String resourceId = "/schema/mstore1";
     registry.registerManagedResource(
-        resourceId, ManagedTextToVectorModelStore.class, new TextToVectorQParserPlugin());
+        resourceId, TextToVectorModelStore.class, new TextToVectorQParserPlugin());
 
     final NamedList initArgs = new NamedList<>();
 
@@ -57,7 +57,7 @@ public void test() throws Exception {
     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 void testRestManagerEndpoints() throws Exception {
     // 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 void testRestManagerEndpoints() throws Exception {
             + "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 void testRestManagerEndpoints() throws Exception {
             + "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 000000000000..5a5189408ef0
--- /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 4b414a18de6e..5a51375e4f46 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.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 void cleanUp() throws Exception {
   }
 
   @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 void managedModelStore_whenUpdateRequestComponentConfigured_shouldBeIniti
         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 void managedModelStore_whenQueryParserComponentConfigured_shouldBeInitial
         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 75a9f206f14e..2b948786d2af 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.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 static void cleanup() throws Exception {
 
   @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 void processAdd_inputField_shouldVectoriseInputField() throws Exception {
         "/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 void processAdd_modelNotFound_shouldThrowException() {
 
   @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 void processAdd_emptyInputField_shouldLogAndIndexWithNoVector() throws Ex
         "/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 void processAdd_nullInputField_shouldLogAndIndexWithNoVector() throws Exc
         "/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 void processAdd_failingVectorisation_shouldLogAndIndexWithNoVector() thro
         "!/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 void processAtomicUpdate_shouldTriggerTheVectorizationAndFetchTheStoredCo
     // (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 void processAtomicUpdate_shouldTriggerTheVectorizationAndFetchTheStoredCo
         "/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 void processAtomicUpdate_shouldReplaceExistingVectorNotAppend() throws Ex
     // 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 void processAtomicUpdate_shouldReplaceExistingVectorNotAppend() throws Ex
         "/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 02617c646364..4c511aa9cc82 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.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 @@ private UpdateRequestProcessor createUpdateProcessor(
       String inputFieldName, String outputFieldName, SolrCore collection1, String modelName) {
     NamedList 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 7e3843230cf7..5e04ac000859 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):