|
18 | 18 | import org.elasticsearch.common.settings.Settings; |
19 | 19 | import org.elasticsearch.common.util.LazyInitializable; |
20 | 20 | import org.elasticsearch.core.Nullable; |
| 21 | +import org.elasticsearch.core.Strings; |
21 | 22 | import org.elasticsearch.core.TimeValue; |
22 | 23 | import org.elasticsearch.inference.ChunkedInference; |
23 | 24 | import org.elasticsearch.inference.ChunkingSettings; |
@@ -111,6 +112,13 @@ public class ElasticsearchInternalService extends BaseElasticsearchInternalServi |
111 | 112 | private static final Logger logger = LogManager.getLogger(ElasticsearchInternalService.class); |
112 | 113 | private static final DeprecationLogger DEPRECATION_LOGGER = DeprecationLogger.getLogger(ElasticsearchInternalService.class); |
113 | 114 |
|
| 115 | + /** |
| 116 | + * Fix for https://github.com/elastic/elasticsearch/issues/124675 |
| 117 | + * In 8.13.0 we transitioned from model_version to model_id. Any elser inference endpoints created prior to 8.13.0 will still use |
| 118 | + * service_settings.model_version. |
| 119 | + */ |
| 120 | + private static final String OLD_MODEL_ID_FIELD_NAME = "model_version"; |
| 121 | + |
114 | 122 | private final Settings settings; |
115 | 123 |
|
116 | 124 | public ElasticsearchInternalService(InferenceServiceExtension.InferenceServiceFactoryContext context) { |
@@ -489,14 +497,18 @@ public Model parsePersistedConfig(String inferenceEntityId, TaskType taskType, M |
489 | 497 | Map<String, Object> serviceSettingsMap = removeFromMapOrThrowIfNull(config, ModelConfigurations.SERVICE_SETTINGS); |
490 | 498 | Map<String, Object> taskSettingsMap = removeFromMapOrDefaultEmpty(config, ModelConfigurations.TASK_SETTINGS); |
491 | 499 |
|
| 500 | + migrateModelVersionToModelId(serviceSettingsMap); |
| 501 | + |
492 | 502 | ChunkingSettings chunkingSettings = null; |
493 | 503 | if (TaskType.TEXT_EMBEDDING.equals(taskType) || TaskType.SPARSE_EMBEDDING.equals(taskType)) { |
494 | 504 | chunkingSettings = ChunkingSettingsBuilder.fromMap(removeFromMap(config, ModelConfigurations.CHUNKING_SETTINGS)); |
495 | 505 | } |
496 | 506 |
|
497 | 507 | String modelId = (String) serviceSettingsMap.get(MODEL_ID); |
498 | 508 | if (modelId == null) { |
499 | | - throw new IllegalArgumentException("Error parsing request config, model id is missing"); |
| 509 | + throw new IllegalArgumentException( |
| 510 | + Strings.format("Error parsing request config, model id is missing for inference id: %s", inferenceEntityId) |
| 511 | + ); |
500 | 512 | } |
501 | 513 |
|
502 | 514 | if (MULTILINGUAL_E5_SMALL_VALID_IDS.contains(modelId)) { |
@@ -536,6 +548,18 @@ public Model parsePersistedConfig(String inferenceEntityId, TaskType taskType, M |
536 | 548 | } |
537 | 549 | } |
538 | 550 |
|
| 551 | + /** |
| 552 | + * Fix for https://github.com/elastic/elasticsearch/issues/124675 |
| 553 | + * In 8.13.0 we transitioned from model_version to model_id. Any elser inference endpoints created prior to 8.13.0 will still use |
| 554 | + * service_settings.model_version. We need to look for that key and migrate it to model_id. |
| 555 | + */ |
| 556 | + private void migrateModelVersionToModelId(Map<String, Object> serviceSettingsMap) { |
| 557 | + if (serviceSettingsMap.containsKey(OLD_MODEL_ID_FIELD_NAME)) { |
| 558 | + String modelId = ServiceUtils.removeAsType(serviceSettingsMap, OLD_MODEL_ID_FIELD_NAME, String.class); |
| 559 | + serviceSettingsMap.put(ElserInternalServiceSettings.MODEL_ID, modelId); |
| 560 | + } |
| 561 | + } |
| 562 | + |
539 | 563 | @Override |
540 | 564 | public void checkModelConfig(Model model, ActionListener<Model> listener) { |
541 | 565 | if (model instanceof CustomElandEmbeddingModel elandModel && elandModel.getTaskType() == TaskType.TEXT_EMBEDDING) { |
|
0 commit comments