From 3f65235837c74289adbd1259fafc01315fc14870 Mon Sep 17 00:00:00 2001 From: Jonathan Buttner Date: Tue, 16 Apr 2024 15:51:20 -0400 Subject: [PATCH] Adding tests for time value parser --- .../azureopenai/AzureOpenAiService.java | 2 +- .../HuggingFaceServiceSettings.java | 2 +- .../inference/services/ServiceUtilsTests.java | 55 +++++++++++++++++++ 3 files changed, 57 insertions(+), 2 deletions(-) diff --git a/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/services/azureopenai/AzureOpenAiService.java b/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/services/azureopenai/AzureOpenAiService.java index 87928d8ef48f0..c6b97e22b099d 100644 --- a/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/services/azureopenai/AzureOpenAiService.java +++ b/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/services/azureopenai/AzureOpenAiService.java @@ -292,6 +292,6 @@ private AzureOpenAiEmbeddingsModel updateModelWithEmbeddingDetails(AzureOpenAiEm @Override public TransportVersion getMinimalSupportedVersion() { - return TransportVersions.ML_INFERENCE_AZURE_OPENAI_EMBEDDINGS; + return TransportVersions.ML_INFERENCE_RATE_LIMIT_SETTINGS_ADDED; } } diff --git a/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/services/huggingface/HuggingFaceServiceSettings.java b/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/services/huggingface/HuggingFaceServiceSettings.java index edeb0728bfaa5..abbcb87a76315 100644 --- a/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/services/huggingface/HuggingFaceServiceSettings.java +++ b/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/services/huggingface/HuggingFaceServiceSettings.java @@ -40,7 +40,7 @@ public class HuggingFaceServiceSettings implements ServiceSettings, HuggingFaceRateLimitServiceSettings { public static final String NAME = "hugging_face_service_settings"; - // At the time of writing HuggingFace hasn't posted the default rate limit for inference endpoints so the value his is only a guess + // At the time of writing HuggingFace hasn't posted the default rate limit for inference endpoints so the value here is only a guess private static final RateLimitSettings DEFAULT_RATE_LIMIT_SETTINGS = new RateLimitSettings(TimeValue.timeValueMinutes(3000)); public static HuggingFaceServiceSettings fromMap(Map map) { diff --git a/x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/services/ServiceUtilsTests.java b/x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/services/ServiceUtilsTests.java index f7995c50203c7..26f6e5b7e694a 100644 --- a/x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/services/ServiceUtilsTests.java +++ b/x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/services/ServiceUtilsTests.java @@ -32,6 +32,7 @@ import static org.elasticsearch.xpack.inference.services.ServiceUtils.createUri; import static org.elasticsearch.xpack.inference.services.ServiceUtils.extractOptionalEnum; import static org.elasticsearch.xpack.inference.services.ServiceUtils.extractOptionalString; +import static org.elasticsearch.xpack.inference.services.ServiceUtils.extractOptionalTimeValue; import static org.elasticsearch.xpack.inference.services.ServiceUtils.extractRequiredSecureString; import static org.elasticsearch.xpack.inference.services.ServiceUtils.extractRequiredString; import static org.elasticsearch.xpack.inference.services.ServiceUtils.getEmbeddingSize; @@ -328,6 +329,60 @@ public void testExtractOptionalEnum_ReturnsClassification_WhenValueIsAcceptable( assertTrue(map.isEmpty()); } + public void testExtractOptionalTimeValue_ReturnsNull_WhenKeyDoesNotExist() { + var validation = new ValidationException(); + Map map = modifiableMap(Map.of("key", 1)); + var timeValue = extractOptionalTimeValue(map, "a", "scope", validation); + + assertNull(timeValue); + assertTrue(validation.validationErrors().isEmpty()); + } + + public void testExtractOptionalTimeValue_CreatesTimeValue_Of3Seconds() { + var validation = new ValidationException(); + Map map = modifiableMap(Map.of("key", "3s")); + var timeValue = extractOptionalTimeValue(map, "key", "scope", validation); + + assertTrue(validation.validationErrors().isEmpty()); + assertNotNull(timeValue); + assertThat(timeValue, is(TimeValue.timeValueSeconds(3))); + assertTrue(map.isEmpty()); + } + + public void testExtractOptionalTimeValue_ReturnsNullAndAddsException_WhenTimeValueIsInvalid_InvalidUnit() { + var validation = new ValidationException(); + Map map = modifiableMap(Map.of("key", "3abc")); + var timeValue = extractOptionalTimeValue(map, "key", "scope", validation); + + assertFalse(validation.validationErrors().isEmpty()); + assertNull(timeValue); + assertTrue(map.isEmpty()); + assertThat( + validation.validationErrors().get(0), + is( + "[scope] Invalid time value [3abc]. [key] must be a valid time value string: failed to parse setting [key] " + + "with value [3abc] as a time value: unit is missing or unrecognized" + ) + ); + } + + public void testExtractOptionalTimeValue_ReturnsNullAndAddsException_WhenTimeValueIsInvalid_NegativeNumber() { + var validation = new ValidationException(); + Map map = modifiableMap(Map.of("key", "-3d")); + var timeValue = extractOptionalTimeValue(map, "key", "scope", validation); + + assertFalse(validation.validationErrors().isEmpty()); + assertNull(timeValue); + assertTrue(map.isEmpty()); + assertThat( + validation.validationErrors().get(0), + is( + "[scope] Invalid time value [-3d]. [key] must be a valid time value string: failed to parse setting [key] " + + "with value [-3d] as a time value: negative durations are not supported" + ) + ); + } + public void testGetEmbeddingSize_ReturnsError_WhenTextEmbeddingResults_IsEmpty() { var service = mock(InferenceService.class);