Skip to content

Commit 2a838ca

Browse files
Adding dimensions to jina preconfigured endpoint (elastic#139642)
(cherry picked from commit 489f23d) # Conflicts: # x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/services/elastic/ElasticInferenceService.java # x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/services/elastic/ElasticInferenceServiceTests.java
1 parent b5d96e9 commit 2a838ca

File tree

5 files changed

+124
-5
lines changed

5 files changed

+124
-5
lines changed

x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/services/elastic/ElasticInferenceService.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -201,7 +201,7 @@ private static Map<String, DefaultModelConfig> initDefaultEndpoints(
201201
new ElasticInferenceServiceDenseTextEmbeddingsServiceSettings(
202202
DEFAULT_MULTILINGUAL_EMBED_MODEL_ID,
203203
defaultDenseTextEmbeddingsSimilarity(),
204-
null,
204+
DENSE_TEXT_EMBEDDINGS_DIMENSIONS,
205205
null,
206206
ElasticInferenceServiceDenseTextEmbeddingsServiceSettings.DEFAULT_RATE_LIMIT_SETTINGS
207207
),

x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/services/elastic/ElasticInferenceServiceModel.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,20 @@ public int rateLimitGroupingHash() {
4646
return Objects.hash(this.getServiceSettings().modelId());
4747
}
4848

49+
@Override
50+
public boolean equals(Object o) {
51+
if (o == null || getClass() != o.getClass()) return false;
52+
if (super.equals(o) == false) return false;
53+
ElasticInferenceServiceModel that = (ElasticInferenceServiceModel) o;
54+
return Objects.equals(rateLimitServiceSettings, that.rateLimitServiceSettings)
55+
&& Objects.equals(elasticInferenceServiceComponents, that.elasticInferenceServiceComponents);
56+
}
57+
58+
@Override
59+
public int hashCode() {
60+
return Objects.hash(super.hashCode(), rateLimitServiceSettings, elasticInferenceServiceComponents);
61+
}
62+
4963
public RateLimitSettings rateLimitSettings() {
5064
return rateLimitServiceSettings.rateLimitSettings();
5165
}

x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/services/elastic/completion/ElasticInferenceServiceCompletionServiceSettings.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import org.elasticsearch.common.ValidationException;
1313
import org.elasticsearch.common.io.stream.StreamInput;
1414
import org.elasticsearch.common.io.stream.StreamOutput;
15+
import org.elasticsearch.core.Nullable;
1516
import org.elasticsearch.inference.ModelConfigurations;
1617
import org.elasticsearch.inference.ServiceSettings;
1718
import org.elasticsearch.xcontent.XContentBuilder;
@@ -60,7 +61,7 @@ public static ElasticInferenceServiceCompletionServiceSettings fromMap(Map<Strin
6061
private final String modelId;
6162
private final RateLimitSettings rateLimitSettings;
6263

63-
public ElasticInferenceServiceCompletionServiceSettings(String modelId, RateLimitSettings rateLimitSettings) {
64+
public ElasticInferenceServiceCompletionServiceSettings(String modelId, @Nullable RateLimitSettings rateLimitSettings) {
6465
this.modelId = Objects.requireNonNull(modelId);
6566
this.rateLimitSettings = Objects.requireNonNullElse(rateLimitSettings, DEFAULT_RATE_LIMIT_SETTINGS);
6667
}

x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/services/elastic/densetextembeddings/ElasticInferenceServiceDenseTextEmbeddingsServiceSettings.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ public ElasticInferenceServiceDenseTextEmbeddingsServiceSettings(
120120
@Nullable SimilarityMeasure similarity,
121121
@Nullable Integer dimensions,
122122
@Nullable Integer maxInputTokens,
123-
RateLimitSettings rateLimitSettings
123+
@Nullable RateLimitSettings rateLimitSettings
124124
) {
125125
this.modelId = modelId;
126126
this.similarity = similarity;

x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/services/elastic/ElasticInferenceServiceTests.java

Lines changed: 106 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import org.elasticsearch.ElasticsearchStatusException;
1212
import org.elasticsearch.action.ActionListener;
1313
import org.elasticsearch.action.support.PlainActionFuture;
14+
import org.elasticsearch.action.support.TestPlainActionFuture;
1415
import org.elasticsearch.common.ValidationException;
1516
import org.elasticsearch.common.bytes.BytesArray;
1617
import org.elasticsearch.common.bytes.BytesReference;
@@ -48,6 +49,7 @@
4849
import org.elasticsearch.xpack.core.inference.results.UnifiedChatCompletionException;
4950
import org.elasticsearch.xpack.inference.InferencePlugin;
5051
import org.elasticsearch.xpack.inference.LocalStateInferencePlugin;
52+
import org.elasticsearch.xpack.inference.chunking.ChunkingSettingsBuilder;
5153
import org.elasticsearch.xpack.inference.external.http.HttpClientManager;
5254
import org.elasticsearch.xpack.inference.external.http.sender.HttpRequestSender;
5355
import org.elasticsearch.xpack.inference.external.http.sender.HttpRequestSenderTests;
@@ -61,9 +63,12 @@
6163
import org.elasticsearch.xpack.inference.services.elastic.authorization.ElasticInferenceServiceAuthorizationRequestHandler;
6264
import org.elasticsearch.xpack.inference.services.elastic.completion.ElasticInferenceServiceCompletionModel;
6365
import org.elasticsearch.xpack.inference.services.elastic.completion.ElasticInferenceServiceCompletionServiceSettings;
66+
import org.elasticsearch.xpack.inference.services.elastic.densetextembeddings.ElasticInferenceServiceDenseTextEmbeddingsModel;
6467
import org.elasticsearch.xpack.inference.services.elastic.densetextembeddings.ElasticInferenceServiceDenseTextEmbeddingsModelTests;
68+
import org.elasticsearch.xpack.inference.services.elastic.densetextembeddings.ElasticInferenceServiceDenseTextEmbeddingsServiceSettings;
6569
import org.elasticsearch.xpack.inference.services.elastic.rerank.ElasticInferenceServiceRerankModel;
6670
import org.elasticsearch.xpack.inference.services.elastic.rerank.ElasticInferenceServiceRerankModelTests;
71+
import org.elasticsearch.xpack.inference.services.elastic.rerank.ElasticInferenceServiceRerankServiceSettings;
6772
import org.elasticsearch.xpack.inference.services.elastic.response.ElasticInferenceServiceAuthorizationResponseEntity;
6873
import org.elasticsearch.xpack.inference.services.elasticsearch.ElserModels;
6974
import org.elasticsearch.xpack.inference.services.settings.RateLimitSettings;
@@ -93,8 +98,19 @@
9398
import static org.elasticsearch.xpack.inference.external.http.Utils.entityAsMap;
9499
import static org.elasticsearch.xpack.inference.external.http.Utils.getUrl;
95100
import static org.elasticsearch.xpack.inference.services.ServiceComponentsTests.createWithEmptySettings;
101+
import static org.elasticsearch.xpack.inference.services.elastic.ElasticInferenceService.DEFAULT_CHAT_COMPLETION_ENDPOINT_ID_V1;
102+
import static org.elasticsearch.xpack.inference.services.elastic.ElasticInferenceService.DEFAULT_CHAT_COMPLETION_MODEL_ID_V1;
103+
import static org.elasticsearch.xpack.inference.services.elastic.ElasticInferenceService.DEFAULT_ELSER_ENDPOINT_ID_V2;
104+
import static org.elasticsearch.xpack.inference.services.elastic.ElasticInferenceService.DEFAULT_ELSER_MODEL_ID_V2;
105+
import static org.elasticsearch.xpack.inference.services.elastic.ElasticInferenceService.DEFAULT_MULTILINGUAL_EMBED_ENDPOINT_ID;
106+
import static org.elasticsearch.xpack.inference.services.elastic.ElasticInferenceService.DEFAULT_MULTILINGUAL_EMBED_MODEL_ID;
107+
import static org.elasticsearch.xpack.inference.services.elastic.ElasticInferenceService.DEFAULT_RERANK_ENDPOINT_ID_V1;
108+
import static org.elasticsearch.xpack.inference.services.elastic.ElasticInferenceService.DEFAULT_RERANK_MODEL_ID_V1;
109+
import static org.elasticsearch.xpack.inference.services.elastic.ElasticInferenceService.DENSE_TEXT_EMBEDDINGS_DIMENSIONS;
110+
import static org.elasticsearch.xpack.inference.services.elastic.ElasticInferenceService.defaultDenseTextEmbeddingsSimilarity;
96111
import static org.hamcrest.CoreMatchers.instanceOf;
97112
import static org.hamcrest.CoreMatchers.is;
113+
import static org.hamcrest.Matchers.containsInAnyOrder;
98114
import static org.hamcrest.Matchers.empty;
99115
import static org.hamcrest.Matchers.equalTo;
100116
import static org.hamcrest.Matchers.hasSize;
@@ -1312,8 +1328,8 @@ public void testDefaultConfigs_Returns_DefaultEndpoints_WhenTaskTypeIsCorrect()
13121328
".multilingual-embed-v1-elastic",
13131329
MinimalServiceSettings.textEmbedding(
13141330
ElasticInferenceService.NAME,
1315-
ElasticInferenceService.DENSE_TEXT_EMBEDDINGS_DIMENSIONS,
1316-
ElasticInferenceService.defaultDenseTextEmbeddingsSimilarity(),
1331+
DENSE_TEXT_EMBEDDINGS_DIMENSIONS,
1332+
defaultDenseTextEmbeddingsSimilarity(),
13171333
DenseVectorFieldMapper.ElementType.FLOAT
13181334
),
13191335
service
@@ -1348,6 +1364,94 @@ public void testDefaultConfigs_Returns_DefaultEndpoints_WhenTaskTypeIsCorrect()
13481364
}
13491365
}
13501366

1367+
public void testDefaultConfigs_Returns_DefaultEndpointsModels() throws Exception {
1368+
String responseJson = """
1369+
{
1370+
"models": [
1371+
{
1372+
"model_name": "rainbow-sprinkles",
1373+
"task_types": ["chat"]
1374+
},
1375+
{
1376+
"model_name": "elser_model_2",
1377+
"task_types": ["embed/text/sparse"]
1378+
},
1379+
{
1380+
"model_name": "jina-embeddings-v3",
1381+
"task_types": ["embed/text/dense"]
1382+
},
1383+
{
1384+
"model_name": "elastic-rerank-v1",
1385+
"task_types": ["rerank/text/text-similarity"]
1386+
}
1387+
]
1388+
}
1389+
""";
1390+
1391+
webServer.enqueue(new MockResponse().setResponseCode(200).setBody(responseJson));
1392+
1393+
var senderFactory = HttpRequestSenderTests.createSenderFactory(threadPool, clientManager);
1394+
try (var service = createServiceWithAuthHandler(senderFactory, getUrl(webServer))) {
1395+
ensureAuthorizationCallFinished(service);
1396+
var listener = new TestPlainActionFuture<List<Model>>();
1397+
1398+
service.defaultConfigs(listener);
1399+
var models = listener.actionGet(TIMEOUT);
1400+
1401+
var elasticInferenceServiceComponents = new ElasticInferenceServiceComponents(getUrl(webServer));
1402+
1403+
assertThat(
1404+
models,
1405+
containsInAnyOrder(
1406+
new ElasticInferenceServiceCompletionModel(
1407+
DEFAULT_CHAT_COMPLETION_ENDPOINT_ID_V1,
1408+
TaskType.CHAT_COMPLETION,
1409+
ElasticInferenceService.NAME,
1410+
new ElasticInferenceServiceCompletionServiceSettings(DEFAULT_CHAT_COMPLETION_MODEL_ID_V1, null),
1411+
EmptyTaskSettings.INSTANCE,
1412+
EmptySecretSettings.INSTANCE,
1413+
elasticInferenceServiceComponents
1414+
),
1415+
new ElasticInferenceServiceSparseEmbeddingsModel(
1416+
DEFAULT_ELSER_ENDPOINT_ID_V2,
1417+
TaskType.SPARSE_EMBEDDING,
1418+
ElasticInferenceService.NAME,
1419+
new ElasticInferenceServiceSparseEmbeddingsServiceSettings(DEFAULT_ELSER_MODEL_ID_V2, null, null),
1420+
EmptyTaskSettings.INSTANCE,
1421+
EmptySecretSettings.INSTANCE,
1422+
elasticInferenceServiceComponents,
1423+
ChunkingSettingsBuilder.DEFAULT_SETTINGS
1424+
),
1425+
new ElasticInferenceServiceDenseTextEmbeddingsModel(
1426+
DEFAULT_MULTILINGUAL_EMBED_ENDPOINT_ID,
1427+
TaskType.TEXT_EMBEDDING,
1428+
ElasticInferenceService.NAME,
1429+
new ElasticInferenceServiceDenseTextEmbeddingsServiceSettings(
1430+
DEFAULT_MULTILINGUAL_EMBED_MODEL_ID,
1431+
defaultDenseTextEmbeddingsSimilarity(),
1432+
DENSE_TEXT_EMBEDDINGS_DIMENSIONS,
1433+
null,
1434+
null
1435+
),
1436+
EmptyTaskSettings.INSTANCE,
1437+
EmptySecretSettings.INSTANCE,
1438+
elasticInferenceServiceComponents,
1439+
ChunkingSettingsBuilder.DEFAULT_SETTINGS
1440+
),
1441+
new ElasticInferenceServiceRerankModel(
1442+
DEFAULT_RERANK_ENDPOINT_ID_V1,
1443+
TaskType.RERANK,
1444+
ElasticInferenceService.NAME,
1445+
new ElasticInferenceServiceRerankServiceSettings(DEFAULT_RERANK_MODEL_ID_V1, null),
1446+
EmptyTaskSettings.INSTANCE,
1447+
EmptySecretSettings.INSTANCE,
1448+
elasticInferenceServiceComponents
1449+
)
1450+
)
1451+
);
1452+
}
1453+
}
1454+
13511455
public void testUnifiedCompletionError() {
13521456
var e = assertThrows(UnifiedChatCompletionException.class, () -> testUnifiedStream(404, """
13531457
{

0 commit comments

Comments
 (0)