Skip to content

Commit 5ebb84c

Browse files
committed
Stash changes
1 parent 228b308 commit 5ebb84c

File tree

4 files changed

+43
-1
lines changed

4 files changed

+43
-1
lines changed

x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/InferencePlugin.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -264,6 +264,7 @@ public Collection<?> createComponents(PluginServices services) {
264264

265265
ModelRegistry modelRegistry = new ModelRegistry(services.clusterService(), services.client());
266266
services.clusterService().addListener(modelRegistry);
267+
SemanticTextFieldMapper.setModelRegistry(modelRegistry);
267268

268269
if (inferenceServiceExtensions == null) {
269270
inferenceServiceExtensions = new ArrayList<>();

x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/mapper/SemanticTextField.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
import org.elasticsearch.core.Nullable;
1717
import org.elasticsearch.index.IndexVersion;
1818
import org.elasticsearch.index.IndexVersions;
19+
import org.elasticsearch.index.mapper.MappingParserContext;
1920
import org.elasticsearch.inference.ChunkedInference;
2021
import org.elasticsearch.inference.ChunkingSettings;
2122
import org.elasticsearch.inference.MinimalServiceSettings;
@@ -293,6 +294,12 @@ public XContentBuilder toXContent(XContentBuilder builder, Params params) throws
293294
null,
294295
new ParseField(CHUNKING_SETTINGS_FIELD)
295296
);
297+
INFERENCE_RESULT_PARSER.declareObjectOrNull(
298+
optionalConstructorArg(),
299+
(p, c) -> parseIndexOptionsFromMap(c.fieldName, p.map(), c.indexVersion()),
300+
null,
301+
new ParseField(INDEX_OPTIONS_FIELD)
302+
);
296303
INFERENCE_RESULT_PARSER.declareField(constructorArg(), (p, c) -> {
297304
if (c.useLegacyFormat()) {
298305
return Map.of(c.fieldName, parseChunksArrayLegacy(p, c));

x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/mapper/SemanticTextFieldMapper.java

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@
7676
import org.elasticsearch.xpack.core.ml.inference.results.TextExpansionResults;
7777
import org.elasticsearch.xpack.core.ml.search.SparseVectorQueryBuilder;
7878
import org.elasticsearch.xpack.inference.highlight.SemanticTextHighlighter;
79+
import org.elasticsearch.xpack.inference.registry.ModelRegistry;
7980

8081
import java.io.IOException;
8182
import java.io.UncheckedIOException;
@@ -144,6 +145,12 @@ public static BiConsumer<String, MappingParserContext> validateParserContext(Str
144145
};
145146
}
146147

148+
private static ModelRegistry modelRegistry;
149+
150+
public static void setModelRegistry(ModelRegistry registry) {
151+
modelRegistry = registry;
152+
}
153+
147154
public static class Builder extends FieldMapper.Builder {
148155
private final boolean useLegacyFormat;
149156

@@ -281,6 +288,9 @@ public SemanticTextFieldMapper build(MapperBuilderContext context) {
281288
if (modelSettings.get() != null) {
282289
validateServiceSettings(modelSettings.get());
283290
}
291+
if (indexOptions.get() != null) {
292+
validateIndexOptions(indexOptions.get(), inferenceId.getValue(), modelSettings.get());
293+
}
284294
final String fullName = context.buildFullName(leafName());
285295

286296
if (context.isInNestedContext()) {
@@ -323,6 +333,26 @@ private void validateServiceSettings(MinimalServiceSettings settings) {
323333
}
324334
}
325335

336+
private void validateIndexOptions(SemanticTextIndexOptions indexOptions, String inferenceId, MinimalServiceSettings modelSettings) {
337+
if (indexOptions == null) {
338+
return;
339+
}
340+
if (modelSettings == null) {
341+
modelSettings = modelRegistry.getMinimalServiceSettings(inferenceId);
342+
}
343+
344+
if (modelSettings == null) {
345+
// TODO throw
346+
return;
347+
}
348+
349+
if (modelSettings.taskType() != TEXT_EMBEDDING) {
350+
throw new IllegalArgumentException("Invalid task type");
351+
}
352+
353+
// TODO additional verification
354+
}
355+
326356
/**
327357
* As necessary, copy settings from this builder to the passed-in mapper.
328358
* Used to preserve {@link MinimalServiceSettings} when updating a semantic text mapping to one where the model settings

x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/registry/ModelRegistry.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -228,7 +228,11 @@ public MinimalServiceSettings getMinimalServiceSettings(String inferenceEntityId
228228
if (config != null) {
229229
return config.settings();
230230
}
231-
var state = ModelRegistryMetadata.fromState(clusterService.state().projectState().metadata());
231+
var clusterState = clusterService.state();
232+
if (clusterState == null) {
233+
return null;
234+
}
235+
var state = ModelRegistryMetadata.fromState(clusterState.projectState().metadata());
232236
var existing = state.getMinimalServiceSettings(inferenceEntityId);
233237
if (state.isUpgraded() && existing == null) {
234238
throw new ResourceNotFoundException(inferenceEntityId + " does not exist in this cluster.");

0 commit comments

Comments
 (0)