diff --git a/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/external/action/ActionUtils.java b/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/external/action/ActionUtils.java index 27d1f1bd14e2c..61cada6e75ef1 100644 --- a/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/external/action/ActionUtils.java +++ b/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/external/action/ActionUtils.java @@ -12,12 +12,9 @@ import org.elasticsearch.ExceptionsHelper; import org.elasticsearch.action.ActionListener; import org.elasticsearch.common.Strings; -import org.elasticsearch.core.Nullable; import org.elasticsearch.inference.InferenceServiceResults; import org.elasticsearch.rest.RestStatus; -import java.net.URI; - public class ActionUtils { public static ActionListener wrapFailuresInElasticsearchException( @@ -30,7 +27,12 @@ public static ActionListener wrapFailuresInElasticsearc if (unwrappedException instanceof ElasticsearchException esException) { l.onFailure(esException); } else { - l.onFailure(createInternalServerError(unwrappedException, errorMessage)); + l.onFailure( + createInternalServerError( + unwrappedException, + Strings.format("%s. Cause: %s", errorMessage, unwrappedException.getMessage()) + ) + ); } }); } @@ -39,11 +41,7 @@ public static ElasticsearchStatusException createInternalServerError(Throwable e return new ElasticsearchStatusException(message, RestStatus.INTERNAL_SERVER_ERROR, e); } - public static String constructFailedToSendRequestMessage(@Nullable URI uri, String message) { - if (uri != null) { - return Strings.format("Failed to send %s request to [%s]", message, uri); - } - + public static String constructFailedToSendRequestMessage(String message) { return Strings.format("Failed to send %s request", message); } diff --git a/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/external/action/alibabacloudsearch/AlibabaCloudSearchCompletionAction.java b/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/external/action/alibabacloudsearch/AlibabaCloudSearchCompletionAction.java index dc1d31f3e59df..b684c3e20f027 100644 --- a/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/external/action/alibabacloudsearch/AlibabaCloudSearchCompletionAction.java +++ b/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/external/action/alibabacloudsearch/AlibabaCloudSearchCompletionAction.java @@ -45,7 +45,7 @@ public AlibabaCloudSearchCompletionAction(Sender sender, AlibabaCloudSearchCompl this.model = Objects.requireNonNull(model); this.sender = Objects.requireNonNull(sender); this.account = new AlibabaCloudSearchAccount(this.model.getSecretSettings().apiKey()); - this.failedToSendRequestErrorMessage = constructFailedToSendRequestMessage(null, "AlibabaCloud Search completion"); + this.failedToSendRequestErrorMessage = constructFailedToSendRequestMessage("AlibabaCloud Search completion"); this.requestCreator = AlibabaCloudSearchCompletionRequestManager.of(account, model, serviceComponents.threadPool()); } diff --git a/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/external/action/alibabacloudsearch/AlibabaCloudSearchEmbeddingsAction.java b/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/external/action/alibabacloudsearch/AlibabaCloudSearchEmbeddingsAction.java index 7a22bbf6b4bfd..91bb582165d3f 100644 --- a/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/external/action/alibabacloudsearch/AlibabaCloudSearchEmbeddingsAction.java +++ b/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/external/action/alibabacloudsearch/AlibabaCloudSearchEmbeddingsAction.java @@ -36,7 +36,7 @@ public AlibabaCloudSearchEmbeddingsAction(Sender sender, AlibabaCloudSearchEmbed this.model = Objects.requireNonNull(model); this.sender = Objects.requireNonNull(sender); this.account = new AlibabaCloudSearchAccount(this.model.getSecretSettings().apiKey()); - this.failedToSendRequestErrorMessage = constructFailedToSendRequestMessage(null, "AlibabaCloud Search text embeddings"); + this.failedToSendRequestErrorMessage = constructFailedToSendRequestMessage("AlibabaCloud Search text embeddings"); this.requestCreator = AlibabaCloudSearchEmbeddingsRequestManager.of(account, model, serviceComponents.threadPool()); } diff --git a/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/external/action/alibabacloudsearch/AlibabaCloudSearchRerankAction.java b/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/external/action/alibabacloudsearch/AlibabaCloudSearchRerankAction.java index 88229ce63463b..c73003d454834 100644 --- a/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/external/action/alibabacloudsearch/AlibabaCloudSearchRerankAction.java +++ b/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/external/action/alibabacloudsearch/AlibabaCloudSearchRerankAction.java @@ -39,7 +39,7 @@ public class AlibabaCloudSearchRerankAction implements ExecutableAction { public AlibabaCloudSearchRerankAction(Sender sender, AlibabaCloudSearchRerankModel model, ServiceComponents serviceComponents) { this.model = Objects.requireNonNull(model); this.account = new AlibabaCloudSearchAccount(this.model.getSecretSettings().apiKey()); - this.failedToSendRequestErrorMessage = constructFailedToSendRequestMessage(null, "AlibabaCloud Search rerank"); + this.failedToSendRequestErrorMessage = constructFailedToSendRequestMessage("AlibabaCloud Search rerank"); this.sender = Objects.requireNonNull(sender); this.requestCreator = AlibabaCloudSearchRerankRequestManager.of(account, model, serviceComponents.threadPool()); } diff --git a/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/external/action/alibabacloudsearch/AlibabaCloudSearchSparseAction.java b/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/external/action/alibabacloudsearch/AlibabaCloudSearchSparseAction.java index 2cd31ff83d200..f76d21214c628 100644 --- a/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/external/action/alibabacloudsearch/AlibabaCloudSearchSparseAction.java +++ b/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/external/action/alibabacloudsearch/AlibabaCloudSearchSparseAction.java @@ -39,7 +39,7 @@ public class AlibabaCloudSearchSparseAction implements ExecutableAction { public AlibabaCloudSearchSparseAction(Sender sender, AlibabaCloudSearchSparseModel model, ServiceComponents serviceComponents) { this.model = Objects.requireNonNull(model); this.account = new AlibabaCloudSearchAccount(this.model.getSecretSettings().apiKey()); - this.failedToSendRequestErrorMessage = constructFailedToSendRequestMessage(null, "AlibabaCloud Search sparse embeddings"); + this.failedToSendRequestErrorMessage = constructFailedToSendRequestMessage("AlibabaCloud Search sparse embeddings"); this.sender = Objects.requireNonNull(sender); requestCreator = AlibabaCloudSearchSparseRequestManager.of(account, model, serviceComponents.threadPool()); } diff --git a/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/external/action/amazonbedrock/AmazonBedrockActionCreator.java b/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/external/action/amazonbedrock/AmazonBedrockActionCreator.java index 2715298c22d63..c66eacfcdd8e7 100644 --- a/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/external/action/amazonbedrock/AmazonBedrockActionCreator.java +++ b/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/external/action/amazonbedrock/AmazonBedrockActionCreator.java @@ -43,7 +43,7 @@ public ExecutableAction create(AmazonBedrockEmbeddingsModel embeddingsModel, Map serviceComponents.threadPool(), timeout ); - var errorMessage = constructFailedToSendRequestMessage(null, "Amazon Bedrock embeddings"); + var errorMessage = constructFailedToSendRequestMessage("Amazon Bedrock embeddings"); return new SenderExecutableAction(sender, requestManager, errorMessage); } @@ -51,7 +51,7 @@ public ExecutableAction create(AmazonBedrockEmbeddingsModel embeddingsModel, Map public ExecutableAction create(AmazonBedrockChatCompletionModel completionModel, Map taskSettings) { var overriddenModel = AmazonBedrockChatCompletionModel.of(completionModel, taskSettings); var requestManager = new AmazonBedrockChatCompletionRequestManager(overriddenModel, serviceComponents.threadPool(), timeout); - var errorMessage = constructFailedToSendRequestMessage(null, "Amazon Bedrock completion"); + var errorMessage = constructFailedToSendRequestMessage("Amazon Bedrock completion"); return new SenderExecutableAction(sender, requestManager, errorMessage); } } diff --git a/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/external/action/anthropic/AnthropicActionCreator.java b/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/external/action/anthropic/AnthropicActionCreator.java index aea6d065e09d1..a97367e29853e 100644 --- a/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/external/action/anthropic/AnthropicActionCreator.java +++ b/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/external/action/anthropic/AnthropicActionCreator.java @@ -36,7 +36,7 @@ public AnthropicActionCreator(Sender sender, ServiceComponents serviceComponents public ExecutableAction create(AnthropicChatCompletionModel model, Map taskSettings) { var overriddenModel = AnthropicChatCompletionModel.of(model, taskSettings); var requestCreator = AnthropicCompletionRequestManager.of(overriddenModel, serviceComponents.threadPool()); - var errorMessage = constructFailedToSendRequestMessage(overriddenModel.getUri(), ERROR_PREFIX); + var errorMessage = constructFailedToSendRequestMessage(ERROR_PREFIX); return new SingleInputSenderExecutableAction(sender, requestCreator, errorMessage, ERROR_PREFIX); } } diff --git a/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/external/action/azureaistudio/AzureAiStudioActionCreator.java b/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/external/action/azureaistudio/AzureAiStudioActionCreator.java index 6a80cee3afd57..146fe5e6b128d 100644 --- a/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/external/action/azureaistudio/AzureAiStudioActionCreator.java +++ b/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/external/action/azureaistudio/AzureAiStudioActionCreator.java @@ -34,7 +34,7 @@ public AzureAiStudioActionCreator(Sender sender, ServiceComponents serviceCompon public ExecutableAction create(AzureAiStudioChatCompletionModel completionModel, Map taskSettings) { var overriddenModel = AzureAiStudioChatCompletionModel.of(completionModel, taskSettings); var requestManager = new AzureAiStudioChatCompletionRequestManager(overriddenModel, serviceComponents.threadPool()); - var errorMessage = constructFailedToSendRequestMessage(completionModel.uri(), "Azure AI Studio completion"); + var errorMessage = constructFailedToSendRequestMessage("Azure AI Studio completion"); return new SenderExecutableAction(sender, requestManager, errorMessage); } @@ -46,7 +46,7 @@ public ExecutableAction create(AzureAiStudioEmbeddingsModel embeddingsModel, Map serviceComponents.truncator(), serviceComponents.threadPool() ); - var errorMessage = constructFailedToSendRequestMessage(embeddingsModel.uri(), "Azure AI Studio embeddings"); + var errorMessage = constructFailedToSendRequestMessage("Azure AI Studio embeddings"); return new SenderExecutableAction(sender, requestManager, errorMessage); } } diff --git a/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/external/action/azureopenai/AzureOpenAiActionCreator.java b/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/external/action/azureopenai/AzureOpenAiActionCreator.java index 1454b7c92ad91..88803bd15d4e3 100644 --- a/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/external/action/azureopenai/AzureOpenAiActionCreator.java +++ b/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/external/action/azureopenai/AzureOpenAiActionCreator.java @@ -43,7 +43,7 @@ public ExecutableAction create(AzureOpenAiEmbeddingsModel model, Map taskSettings) { var overriddenModel = AzureOpenAiCompletionModel.of(model, taskSettings); var requestCreator = new AzureOpenAiCompletionRequestManager(overriddenModel, serviceComponents.threadPool()); - var errorMessage = constructFailedToSendRequestMessage(overriddenModel.getUri(), COMPLETION_ERROR_PREFIX); + var errorMessage = constructFailedToSendRequestMessage(COMPLETION_ERROR_PREFIX); return new SingleInputSenderExecutableAction(sender, requestCreator, errorMessage, COMPLETION_ERROR_PREFIX); } } diff --git a/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/external/action/cohere/CohereActionCreator.java b/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/external/action/cohere/CohereActionCreator.java index 9462ab1a361b4..b39a63dae2710 100644 --- a/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/external/action/cohere/CohereActionCreator.java +++ b/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/external/action/cohere/CohereActionCreator.java @@ -42,10 +42,7 @@ public CohereActionCreator(Sender sender, ServiceComponents serviceComponents) { @Override public ExecutableAction create(CohereEmbeddingsModel model, Map taskSettings, InputType inputType) { var overriddenModel = CohereEmbeddingsModel.of(model, taskSettings, inputType); - var failedToSendRequestErrorMessage = constructFailedToSendRequestMessage( - overriddenModel.getServiceSettings().getCommonSettings().uri(), - "Cohere embeddings" - ); + var failedToSendRequestErrorMessage = constructFailedToSendRequestMessage("Cohere embeddings"); // TODO - Batching pass the batching class on to the CohereEmbeddingsRequestManager var requestCreator = CohereEmbeddingsRequestManager.of(overriddenModel, serviceComponents.threadPool()); return new SenderExecutableAction(sender, requestCreator, failedToSendRequestErrorMessage); @@ -55,10 +52,7 @@ public ExecutableAction create(CohereEmbeddingsModel model, Map public ExecutableAction create(CohereRerankModel model, Map taskSettings) { var overriddenModel = CohereRerankModel.of(model, taskSettings); var requestCreator = CohereRerankRequestManager.of(overriddenModel, serviceComponents.threadPool()); - var failedToSendRequestErrorMessage = constructFailedToSendRequestMessage( - overriddenModel.getServiceSettings().uri(), - "Cohere rerank" - ); + var failedToSendRequestErrorMessage = constructFailedToSendRequestMessage("Cohere rerank"); return new SenderExecutableAction(sender, requestCreator, failedToSendRequestErrorMessage); } @@ -66,10 +60,7 @@ public ExecutableAction create(CohereRerankModel model, Map task public ExecutableAction create(CohereCompletionModel model, Map taskSettings) { // no overridden model as task settings are always empty for cohere completion model var requestManager = CohereCompletionRequestManager.of(model, serviceComponents.threadPool()); - var failedToSendRequestErrorMessage = constructFailedToSendRequestMessage( - model.getServiceSettings().uri(), - COMPLETION_ERROR_PREFIX - ); + var failedToSendRequestErrorMessage = constructFailedToSendRequestMessage(COMPLETION_ERROR_PREFIX); return new SingleInputSenderExecutableAction(sender, requestManager, failedToSendRequestErrorMessage, COMPLETION_ERROR_PREFIX); } } diff --git a/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/external/action/elastic/ElasticInferenceServiceActionCreator.java b/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/external/action/elastic/ElasticInferenceServiceActionCreator.java index 915d8b3b64bc1..8a5c735b96974 100644 --- a/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/external/action/elastic/ElasticInferenceServiceActionCreator.java +++ b/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/external/action/elastic/ElasticInferenceServiceActionCreator.java @@ -48,7 +48,6 @@ public ElasticInferenceServiceActionCreator( public ExecutableAction create(ElasticInferenceServiceSparseEmbeddingsModel model) { var requestManager = new ElasticInferenceServiceSparseEmbeddingsRequestManager(model, serviceComponents, traceContext, inputType); var errorMessage = constructFailedToSendRequestMessage( - model.uri(), String.format(Locale.ROOT, "%s sparse embeddings", ELASTIC_INFERENCE_SERVICE_IDENTIFIER) ); return new SenderExecutableAction(sender, requestManager, errorMessage); diff --git a/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/external/action/googlevertexai/GoogleVertexAiActionCreator.java b/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/external/action/googlevertexai/GoogleVertexAiActionCreator.java index 99f535f81485c..125e16cd2a58a 100644 --- a/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/external/action/googlevertexai/GoogleVertexAiActionCreator.java +++ b/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/external/action/googlevertexai/GoogleVertexAiActionCreator.java @@ -41,13 +41,13 @@ public ExecutableAction create(GoogleVertexAiEmbeddingsModel model, Map taskSettings) { - var failedToSendRequestErrorMessage = constructFailedToSendRequestMessage(model.uri(), "Google Vertex AI rerank"); + var failedToSendRequestErrorMessage = constructFailedToSendRequestMessage("Google Vertex AI rerank"); var requestManager = GoogleVertexAiRerankRequestManager.of(model, serviceComponents.threadPool()); return new SenderExecutableAction(sender, requestManager, failedToSendRequestErrorMessage); } diff --git a/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/external/action/ibmwatsonx/IbmWatsonxActionCreator.java b/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/external/action/ibmwatsonx/IbmWatsonxActionCreator.java index 6b1097256e97f..9eb4ab2024aed 100644 --- a/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/external/action/ibmwatsonx/IbmWatsonxActionCreator.java +++ b/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/external/action/ibmwatsonx/IbmWatsonxActionCreator.java @@ -34,7 +34,7 @@ public IbmWatsonxActionCreator(Sender sender, ServiceComponents serviceComponent @Override public ExecutableAction create(IbmWatsonxEmbeddingsModel model, Map taskSettings) { - var failedToSendRequestErrorMessage = constructFailedToSendRequestMessage(model.uri(), "IBM WatsonX embeddings"); + var failedToSendRequestErrorMessage = constructFailedToSendRequestMessage("IBM WatsonX embeddings"); return new SenderExecutableAction( sender, getEmbeddingsRequestManager(model, serviceComponents.truncator(), serviceComponents.threadPool()), @@ -46,10 +46,7 @@ public ExecutableAction create(IbmWatsonxEmbeddingsModel model, Map taskSettings) { var overriddenModel = IbmWatsonxRerankModel.of(model, taskSettings); var requestCreator = IbmWatsonxRerankRequestManager.of(overriddenModel, serviceComponents.threadPool()); - var failedToSendRequestErrorMessage = constructFailedToSendRequestMessage( - overriddenModel.getServiceSettings().uri(), - "Ibm Watsonx rerank" - ); + var failedToSendRequestErrorMessage = constructFailedToSendRequestMessage("Ibm Watsonx rerank"); return new SenderExecutableAction(sender, requestCreator, failedToSendRequestErrorMessage); } diff --git a/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/external/action/jinaai/JinaAIActionCreator.java b/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/external/action/jinaai/JinaAIActionCreator.java index 4d5827a3bf266..590079fd4dc50 100644 --- a/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/external/action/jinaai/JinaAIActionCreator.java +++ b/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/external/action/jinaai/JinaAIActionCreator.java @@ -37,10 +37,7 @@ public JinaAIActionCreator(Sender sender, ServiceComponents serviceComponents) { @Override public ExecutableAction create(JinaAIEmbeddingsModel model, Map taskSettings, InputType inputType) { var overriddenModel = JinaAIEmbeddingsModel.of(model, taskSettings, inputType); - var failedToSendRequestErrorMessage = constructFailedToSendRequestMessage( - overriddenModel.getServiceSettings().getCommonSettings().uri(), - "JinaAI embeddings" - ); + var failedToSendRequestErrorMessage = constructFailedToSendRequestMessage("JinaAI embeddings"); var requestCreator = JinaAIEmbeddingsRequestManager.of(overriddenModel, serviceComponents.threadPool()); return new SenderExecutableAction(sender, requestCreator, failedToSendRequestErrorMessage); } @@ -48,10 +45,7 @@ public ExecutableAction create(JinaAIEmbeddingsModel model, Map @Override public ExecutableAction create(JinaAIRerankModel model, Map taskSettings) { var overriddenModel = JinaAIRerankModel.of(model, taskSettings); - var failedToSendRequestErrorMessage = constructFailedToSendRequestMessage( - overriddenModel.getServiceSettings().getCommonSettings().uri(), - "JinaAI rerank" - ); + var failedToSendRequestErrorMessage = constructFailedToSendRequestMessage("JinaAI rerank"); var requestCreator = JinaAIRerankRequestManager.of(overriddenModel, serviceComponents.threadPool()); return new SenderExecutableAction(sender, requestCreator, failedToSendRequestErrorMessage); } diff --git a/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/external/action/mistral/MistralActionCreator.java b/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/external/action/mistral/MistralActionCreator.java index 21a80ee9d21fa..a1c4764a95091 100644 --- a/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/external/action/mistral/MistralActionCreator.java +++ b/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/external/action/mistral/MistralActionCreator.java @@ -35,7 +35,7 @@ public ExecutableAction create(MistralEmbeddingsModel embeddingsModel, Map serviceComponents.truncator(), serviceComponents.threadPool() ); - var errorMessage = constructFailedToSendRequestMessage(overriddenModel.getServiceSettings().uri(), "OpenAI embeddings"); + var errorMessage = constructFailedToSendRequestMessage("OpenAI embeddings"); return new SenderExecutableAction(sender, requestCreator, errorMessage); } @@ -51,7 +51,7 @@ public ExecutableAction create(OpenAiEmbeddingsModel model, Map public ExecutableAction create(OpenAiChatCompletionModel model, Map taskSettings) { var overriddenModel = OpenAiChatCompletionModel.of(model, taskSettings); var requestCreator = OpenAiCompletionRequestManager.of(overriddenModel, serviceComponents.threadPool()); - var errorMessage = constructFailedToSendRequestMessage(overriddenModel.getServiceSettings().uri(), COMPLETION_ERROR_PREFIX); + var errorMessage = constructFailedToSendRequestMessage(COMPLETION_ERROR_PREFIX); return new SingleInputSenderExecutableAction(sender, requestCreator, errorMessage, COMPLETION_ERROR_PREFIX); } } diff --git a/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/external/action/voyageai/VoyageAIActionCreator.java b/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/external/action/voyageai/VoyageAIActionCreator.java index 6a4a9e5f93639..111af588f3ce5 100644 --- a/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/external/action/voyageai/VoyageAIActionCreator.java +++ b/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/external/action/voyageai/VoyageAIActionCreator.java @@ -37,7 +37,7 @@ public VoyageAIActionCreator(Sender sender, ServiceComponents serviceComponents) @Override public ExecutableAction create(VoyageAIEmbeddingsModel model, Map taskSettings, InputType inputType) { var overriddenModel = VoyageAIEmbeddingsModel.of(model, taskSettings, inputType); - var failedToSendRequestErrorMessage = constructFailedToSendRequestMessage(overriddenModel.uri(), "VoyageAI embeddings"); + var failedToSendRequestErrorMessage = constructFailedToSendRequestMessage("VoyageAI embeddings"); var requestCreator = VoyageAIEmbeddingsRequestManager.of(overriddenModel, serviceComponents.threadPool()); return new SenderExecutableAction(sender, requestCreator, failedToSendRequestErrorMessage); } @@ -45,7 +45,7 @@ public ExecutableAction create(VoyageAIEmbeddingsModel model, Map taskSettings) { var overriddenModel = VoyageAIRerankModel.of(model, taskSettings); - var failedToSendRequestErrorMessage = constructFailedToSendRequestMessage(overriddenModel.uri(), "VoyageAI rerank"); + var failedToSendRequestErrorMessage = constructFailedToSendRequestMessage("VoyageAI rerank"); var requestCreator = VoyageAIRerankRequestManager.of(overriddenModel, serviceComponents.threadPool()); return new SenderExecutableAction(sender, requestCreator, failedToSendRequestErrorMessage); } diff --git a/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/services/elastic/ElasticInferenceService.java b/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/services/elastic/ElasticInferenceService.java index 9ea816757fe13..32a6c3ea274e3 100644 --- a/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/services/elastic/ElasticInferenceService.java +++ b/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/services/elastic/ElasticInferenceService.java @@ -355,7 +355,6 @@ protected void doUnifiedCompletionInfer( var completionModel = (ElasticInferenceServiceCompletionModel) model; var overriddenModel = ElasticInferenceServiceCompletionModel.of(completionModel, inputs.getRequest()); var errorMessage = constructFailedToSendRequestMessage( - overriddenModel.uri(), String.format(Locale.ROOT, "%s completions", ELASTIC_INFERENCE_SERVICE_IDENTIFIER) ); diff --git a/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/services/googleaistudio/GoogleAiStudioService.java b/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/services/googleaistudio/GoogleAiStudioService.java index 29b5fca47eabe..d9a632677a9f7 100644 --- a/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/services/googleaistudio/GoogleAiStudioService.java +++ b/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/services/googleaistudio/GoogleAiStudioService.java @@ -282,10 +282,7 @@ protected void doInfer( ) { if (model instanceof GoogleAiStudioCompletionModel completionModel) { var requestManager = new GoogleAiStudioCompletionRequestManager(completionModel, getServiceComponents().threadPool()); - var failedToSendRequestErrorMessage = constructFailedToSendRequestMessage( - completionModel.uri(inputs.stream()), - "Google AI Studio completion" - ); + var failedToSendRequestErrorMessage = constructFailedToSendRequestMessage("Google AI Studio completion"); var action = new SingleInputSenderExecutableAction( getSender(), requestManager, @@ -299,7 +296,7 @@ protected void doInfer( getServiceComponents().truncator(), getServiceComponents().threadPool() ); - var failedToSendRequestErrorMessage = constructFailedToSendRequestMessage(embeddingsModel.uri(), "Google AI Studio embeddings"); + var failedToSendRequestErrorMessage = constructFailedToSendRequestMessage("Google AI Studio embeddings"); var action = new SenderExecutableAction(getSender(), requestManager, failedToSendRequestErrorMessage); action.execute(inputs, timeout, listener); } else { diff --git a/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/services/openai/OpenAiService.java b/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/services/openai/OpenAiService.java index 4651781c3a4dc..30973bea16ec5 100644 --- a/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/services/openai/OpenAiService.java +++ b/x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/services/openai/OpenAiService.java @@ -296,7 +296,7 @@ public void doUnifiedCompletionInfer( var overriddenModel = OpenAiChatCompletionModel.of(openAiModel, inputs.getRequest()); var requestCreator = OpenAiUnifiedCompletionRequestManager.of(overriddenModel, getServiceComponents().threadPool()); - var errorMessage = constructFailedToSendRequestMessage(overriddenModel.getServiceSettings().uri(), COMPLETION_ERROR_PREFIX); + var errorMessage = constructFailedToSendRequestMessage(COMPLETION_ERROR_PREFIX); var action = new SenderExecutableAction(getSender(), requestCreator, errorMessage); action.execute(inputs, timeout, listener); diff --git a/x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/external/action/SenderExecutableActionTests.java b/x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/external/action/SenderExecutableActionTests.java index 3b95c4ba86e59..4d88eabb105db 100644 --- a/x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/external/action/SenderExecutableActionTests.java +++ b/x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/external/action/SenderExecutableActionTests.java @@ -34,6 +34,7 @@ public class SenderExecutableActionTests extends ESTestCase { private static final String failedToSendRequestErrorMessage = "test failed"; + private static final String failureExceptionMessage = failedToSendRequestErrorMessage + ". Cause: test"; private Sender sender; private RequestManager requestManager; private SenderExecutableAction executableAction; @@ -96,7 +97,7 @@ public void testSendThrowingExceptionIsWrapped() { execute(actualException); assertThat(actualException.get(), notNullValue()); - assertThat(actualException.get().getMessage(), is(failedToSendRequestErrorMessage)); + assertThat(actualException.get().getMessage(), is(failureExceptionMessage)); assertThat(actualException.get(), instanceOf(ElasticsearchStatusException.class)); assertThat(actualException.get().getCause(), sameInstance(expectedException)); } @@ -110,7 +111,7 @@ public void testSenderReturnedExceptionIsWrapped() { execute(actualException); assertThat(actualException.get(), notNullValue()); - assertThat(actualException.get().getMessage(), is(failedToSendRequestErrorMessage)); + assertThat(actualException.get().getMessage(), is(failureExceptionMessage)); assertThat(actualException.get(), instanceOf(ElasticsearchStatusException.class)); assertThat(actualException.get().getCause(), sameInstance(expectedException)); } diff --git a/x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/external/action/anthropic/AnthropicActionCreatorTests.java b/x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/external/action/anthropic/AnthropicActionCreatorTests.java index f0de37ceaaf98..b9f0281c20c82 100644 --- a/x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/external/action/anthropic/AnthropicActionCreatorTests.java +++ b/x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/external/action/anthropic/AnthropicActionCreatorTests.java @@ -34,7 +34,6 @@ import java.util.Map; import java.util.concurrent.TimeUnit; -import static org.elasticsearch.core.Strings.format; import static org.elasticsearch.xpack.inference.Utils.inferenceUtilityPool; import static org.elasticsearch.xpack.inference.Utils.mockClusterServiceEmpty; import static org.elasticsearch.xpack.inference.external.http.Utils.entityAsMap; @@ -171,15 +170,13 @@ public void testCreate_ChatCompletionModel_FailsFromInvalidResponseFormat() thro PlainActionFuture listener = new PlainActionFuture<>(); action.execute(new ChatCompletionInput(List.of("abc")), InferenceAction.Request.DEFAULT_TIMEOUT, listener); + var failureCauseMessage = "Failed to find required field [content] in Anthropic chat completions response"; var thrownException = expectThrows(ElasticsearchStatusException.class, () -> listener.actionGet(TIMEOUT)); assertThat( thrownException.getMessage(), - is(format("Failed to send Anthropic chat completions request to [%s]", getUrl(webServer))) - ); - assertThat( - thrownException.getCause().getMessage(), - is("Failed to find required field [content] in Anthropic chat completions response") + is("Failed to send Anthropic chat completions request. Cause: " + failureCauseMessage) ); + assertThat(thrownException.getCause().getMessage(), is(failureCauseMessage)); assertThat(webServer.requests(), hasSize(1)); assertNull(webServer.requests().get(0).getUri().getQuery()); diff --git a/x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/external/action/anthropic/AnthropicChatCompletionActionTests.java b/x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/external/action/anthropic/AnthropicChatCompletionActionTests.java index 2065a726b7589..fb538cfc5d55b 100644 --- a/x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/external/action/anthropic/AnthropicChatCompletionActionTests.java +++ b/x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/external/action/anthropic/AnthropicChatCompletionActionTests.java @@ -42,7 +42,6 @@ import java.util.Map; import java.util.concurrent.TimeUnit; -import static org.elasticsearch.core.Strings.format; import static org.elasticsearch.xpack.inference.Utils.inferenceUtilityPool; import static org.elasticsearch.xpack.inference.Utils.mockClusterServiceEmpty; import static org.elasticsearch.xpack.inference.external.action.ActionUtils.constructFailedToSendRequestMessage; @@ -160,8 +159,7 @@ public void testExecute_ThrowsElasticsearchException_WhenSenderOnFailureIsCalled var sender = mock(Sender.class); doAnswer(invocation -> { - @SuppressWarnings("unchecked") - ActionListener listener = (ActionListener) invocation.getArguments()[2]; + ActionListener listener = invocation.getArgument(3); listener.onFailure(new IllegalStateException("failed")); return Void.TYPE; @@ -174,10 +172,7 @@ public void testExecute_ThrowsElasticsearchException_WhenSenderOnFailureIsCalled var thrownException = expectThrows(ElasticsearchException.class, () -> listener.actionGet(TIMEOUT)); - assertThat( - thrownException.getMessage(), - is(format("Failed to send Anthropic chat completions request to [%s]", getUrl(webServer))) - ); + assertThat(thrownException.getMessage(), is("Failed to send Anthropic chat completions request. Cause: failed")); } public void testExecute_ThrowsException() { @@ -191,10 +186,7 @@ public void testExecute_ThrowsException() { var thrownException = expectThrows(ElasticsearchException.class, () -> listener.actionGet(TIMEOUT)); - assertThat( - thrownException.getMessage(), - is(format("Failed to send Anthropic chat completions request to [%s]", getUrl(webServer))) - ); + assertThat(thrownException.getMessage(), is("Failed to send Anthropic chat completions request. Cause: failed")); } public void testExecute_ThrowsException_WhenInputIsGreaterThanOne() throws IOException { @@ -241,7 +233,7 @@ public void testExecute_ThrowsException_WhenInputIsGreaterThanOne() throws IOExc private ExecutableAction createAction(String url, String apiKey, String modelName, int maxTokens, Sender sender) { var model = AnthropicChatCompletionModelTests.createChatCompletionModel(url, apiKey, modelName, maxTokens); var requestCreator = AnthropicCompletionRequestManager.of(model, threadPool); - var errorMessage = constructFailedToSendRequestMessage(model.getUri(), "Anthropic chat completions"); + var errorMessage = constructFailedToSendRequestMessage("Anthropic chat completions"); return new SingleInputSenderExecutableAction(sender, requestCreator, errorMessage, "Anthropic chat completions"); } } diff --git a/x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/external/action/azureopenai/AzureOpenAiActionCreatorTests.java b/x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/external/action/azureopenai/AzureOpenAiActionCreatorTests.java index 7e1e3e55caed8..df124c35a4689 100644 --- a/x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/external/action/azureopenai/AzureOpenAiActionCreatorTests.java +++ b/x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/external/action/azureopenai/AzureOpenAiActionCreatorTests.java @@ -219,12 +219,13 @@ public void testCreate_AzureOpenAiEmbeddingsModel_FailsFromInvalidResponseFormat PlainActionFuture listener = new PlainActionFuture<>(); action.execute(new DocumentsOnlyInput(List.of("abc")), InferenceAction.Request.DEFAULT_TIMEOUT, listener); + var failureCauseMessage = "Failed to find required field [data] in OpenAI embeddings response"; var thrownException = expectThrows(ElasticsearchStatusException.class, () -> listener.actionGet(TIMEOUT)); assertThat( thrownException.getMessage(), - is(format("Failed to send Azure OpenAI embeddings request to [%s]", getUrl(webServer))) + is(format("Failed to send Azure OpenAI embeddings request. Cause: %s", failureCauseMessage)) ); - assertThat(thrownException.getCause().getMessage(), is("Failed to find required field [data] in OpenAI embeddings response")); + assertThat(thrownException.getCause().getMessage(), is(failureCauseMessage)); assertThat(webServer.requests(), hasSize(1)); validateRequestWithApiKey(webServer.requests().get(0), "apikey"); @@ -592,10 +593,11 @@ public void testInfer_AzureOpenAiCompletionModel_FailsFromInvalidResponseFormat( PlainActionFuture listener = new PlainActionFuture<>(); action.execute(new ChatCompletionInput(List.of(completionInput)), InferenceAction.Request.DEFAULT_TIMEOUT, listener); + var failureCauseMessage = "Failed to find required field [choices] in Azure OpenAI completions response"; var thrownException = expectThrows(ElasticsearchStatusException.class, () -> listener.actionGet(TIMEOUT)); assertThat( thrownException.getMessage(), - is(format("Failed to send Azure OpenAI completion request to [%s]", getUrl(webServer))) + is(format("Failed to send Azure OpenAI completion request. Cause: %s", failureCauseMessage)) ); assertThat( thrownException.getCause().getMessage(), diff --git a/x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/external/action/azureopenai/AzureOpenAiCompletionActionTests.java b/x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/external/action/azureopenai/AzureOpenAiCompletionActionTests.java index dca12dfda9c98..f2885373a3b32 100644 --- a/x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/external/action/azureopenai/AzureOpenAiCompletionActionTests.java +++ b/x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/external/action/azureopenai/AzureOpenAiCompletionActionTests.java @@ -41,7 +41,6 @@ import java.util.Map; import java.util.concurrent.TimeUnit; -import static org.elasticsearch.core.Strings.format; import static org.elasticsearch.xpack.inference.Utils.inferenceUtilityPool; import static org.elasticsearch.xpack.inference.Utils.mockClusterServiceEmpty; import static org.elasticsearch.xpack.inference.external.action.ActionUtils.constructFailedToSendRequestMessage; @@ -153,8 +152,7 @@ public void testExecute_ThrowsElasticsearchException_WhenSenderOnFailureIsCalled var sender = mock(Sender.class); doAnswer(invocation -> { - @SuppressWarnings("unchecked") - ActionListener listener = (ActionListener) invocation.getArguments()[1]; + ActionListener listener = invocation.getArgument(3); listener.onFailure(new IllegalStateException("failed")); return Void.TYPE; @@ -167,7 +165,7 @@ public void testExecute_ThrowsElasticsearchException_WhenSenderOnFailureIsCalled var thrownException = expectThrows(ElasticsearchException.class, () -> listener.actionGet(TIMEOUT)); - assertThat(thrownException.getMessage(), is(format("Failed to send Azure OpenAI completion request to [%s]", getUrl(webServer)))); + assertThat(thrownException.getMessage(), is("Failed to send Azure OpenAI completion request. Cause: failed")); } public void testExecute_ThrowsException() { @@ -181,7 +179,7 @@ public void testExecute_ThrowsException() { var thrownException = expectThrows(ElasticsearchException.class, () -> listener.actionGet(TIMEOUT)); - assertThat(thrownException.getMessage(), is(format("Failed to send Azure OpenAI completion request to [%s]", getUrl(webServer)))); + assertThat(thrownException.getMessage(), is("Failed to send Azure OpenAI completion request. Cause: failed")); } private ExecutableAction createAction( @@ -197,7 +195,7 @@ private ExecutableAction createAction( var model = createCompletionModel(resourceName, deploymentId, apiVersion, user, apiKey, null, inferenceEntityId); model.setUri(new URI(getUrl(webServer))); var requestCreator = new AzureOpenAiCompletionRequestManager(model, threadPool); - var errorMessage = constructFailedToSendRequestMessage(model.getUri(), "Azure OpenAI completion"); + var errorMessage = constructFailedToSendRequestMessage("Azure OpenAI completion"); return new SingleInputSenderExecutableAction(sender, requestCreator, errorMessage, "Azure OpenAI completion"); } catch (URISyntaxException e) { throw new RuntimeException(e); diff --git a/x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/external/action/azureopenai/AzureOpenAiEmbeddingsActionTests.java b/x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/external/action/azureopenai/AzureOpenAiEmbeddingsActionTests.java index 4c07ce81eb4cc..33d0e7d02a380 100644 --- a/x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/external/action/azureopenai/AzureOpenAiEmbeddingsActionTests.java +++ b/x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/external/action/azureopenai/AzureOpenAiEmbeddingsActionTests.java @@ -42,7 +42,6 @@ import java.util.List; import java.util.concurrent.TimeUnit; -import static org.elasticsearch.core.Strings.format; import static org.elasticsearch.xpack.inference.Utils.inferenceUtilityPool; import static org.elasticsearch.xpack.inference.Utils.mockClusterServiceEmpty; import static org.elasticsearch.xpack.inference.external.action.ActionUtils.constructFailedToSendRequestMessage; @@ -149,8 +148,7 @@ public void testExecute_ThrowsElasticsearchException_WhenSenderOnFailureIsCalled var sender = mock(Sender.class); doAnswer(invocation -> { - @SuppressWarnings("unchecked") - ActionListener listener = (ActionListener) invocation.getArguments()[1]; + ActionListener listener = invocation.getArgument(3); listener.onFailure(new IllegalStateException("failed")); return Void.TYPE; @@ -163,15 +161,14 @@ public void testExecute_ThrowsElasticsearchException_WhenSenderOnFailureIsCalled var thrownException = expectThrows(ElasticsearchException.class, () -> listener.actionGet(TIMEOUT)); - assertThat(thrownException.getMessage(), is(format("Failed to send Azure OpenAI embeddings request to [%s]", getUrl(webServer)))); + assertThat(thrownException.getMessage(), is("Failed to send Azure OpenAI embeddings request. Cause: failed")); } public void testExecute_ThrowsElasticsearchException_WhenSenderOnFailureIsCalled_WhenUrlIsNull() { var sender = mock(Sender.class); doAnswer(invocation -> { - @SuppressWarnings("unchecked") - ActionListener listener = (ActionListener) invocation.getArguments()[1]; + ActionListener listener = invocation.getArgument(3); listener.onFailure(new IllegalStateException("failed")); return Void.TYPE; @@ -184,7 +181,7 @@ public void testExecute_ThrowsElasticsearchException_WhenSenderOnFailureIsCalled var thrownException = expectThrows(ElasticsearchException.class, () -> listener.actionGet(TIMEOUT)); - assertThat(thrownException.getMessage(), is(format("Failed to send Azure OpenAI embeddings request to [%s]", getUrl(webServer)))); + assertThat(thrownException.getMessage(), is("Failed to send Azure OpenAI embeddings request. Cause: failed")); } public void testExecute_ThrowsException() { @@ -198,7 +195,7 @@ public void testExecute_ThrowsException() { var thrownException = expectThrows(ElasticsearchException.class, () -> listener.actionGet(TIMEOUT)); - assertThat(thrownException.getMessage(), is(format("Failed to send Azure OpenAI embeddings request to [%s]", getUrl(webServer)))); + assertThat(thrownException.getMessage(), is("Failed to send Azure OpenAI embeddings request. Cause: failed")); } private ExecutableAction createAction( @@ -215,7 +212,7 @@ private ExecutableAction createAction( model = createModel(resourceName, deploymentId, apiVersion, user, apiKey, null, inferenceEntityId); model.setUri(new URI(getUrl(webServer))); var requestCreator = new AzureOpenAiEmbeddingsRequestManager(model, TruncatorTests.createTruncator(), threadPool); - var errorMessage = constructFailedToSendRequestMessage(model.getUri(), "Azure OpenAI embeddings"); + var errorMessage = constructFailedToSendRequestMessage("Azure OpenAI embeddings"); return new SenderExecutableAction(sender, requestCreator, errorMessage); } catch (URISyntaxException e) { throw new RuntimeException(e); diff --git a/x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/external/action/cohere/CohereCompletionActionTests.java b/x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/external/action/cohere/CohereCompletionActionTests.java index c5871adb34864..6e98389728f13 100644 --- a/x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/external/action/cohere/CohereCompletionActionTests.java +++ b/x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/external/action/cohere/CohereCompletionActionTests.java @@ -41,7 +41,6 @@ import java.util.Map; import java.util.concurrent.TimeUnit; -import static org.elasticsearch.core.Strings.format; import static org.elasticsearch.xpack.inference.Utils.inferenceUtilityPool; import static org.elasticsearch.xpack.inference.Utils.mockClusterServiceEmpty; import static org.elasticsearch.xpack.inference.external.action.ActionUtils.constructFailedToSendRequestMessage; @@ -225,8 +224,7 @@ public void testExecute_ThrowsElasticsearchException_WhenSenderOnFailureIsCalled var sender = mock(Sender.class); doAnswer(invocation -> { - @SuppressWarnings("unchecked") - ActionListener listener = (ActionListener) invocation.getArguments()[2]; + ActionListener listener = invocation.getArgument(3); listener.onFailure(new IllegalStateException("failed")); return Void.TYPE; @@ -239,15 +237,14 @@ public void testExecute_ThrowsElasticsearchException_WhenSenderOnFailureIsCalled var thrownException = expectThrows(ElasticsearchException.class, () -> listener.actionGet(TIMEOUT)); - assertThat(thrownException.getMessage(), is(format("Failed to send Cohere completion request to [%s]", getUrl(webServer)))); + assertThat(thrownException.getMessage(), is("Failed to send Cohere completion request. Cause: failed")); } public void testExecute_ThrowsElasticsearchException_WhenSenderOnFailureIsCalled_WhenUrlIsNull() { var sender = mock(Sender.class); doAnswer(invocation -> { - @SuppressWarnings("unchecked") - ActionListener listener = (ActionListener) invocation.getArguments()[2]; + ActionListener listener = invocation.getArgument(3); listener.onFailure(new IllegalStateException("failed")); return Void.TYPE; @@ -260,7 +257,7 @@ public void testExecute_ThrowsElasticsearchException_WhenSenderOnFailureIsCalled var thrownException = expectThrows(ElasticsearchException.class, () -> listener.actionGet(TIMEOUT)); - assertThat(thrownException.getMessage(), is(format("Failed to send Cohere completion request", getUrl(webServer)))); + assertThat(thrownException.getMessage(), is("Failed to send Cohere completion request. Cause: failed")); } public void testExecute_ThrowsException() { @@ -274,7 +271,7 @@ public void testExecute_ThrowsException() { var thrownException = expectThrows(ElasticsearchException.class, () -> listener.actionGet(TIMEOUT)); - assertThat(thrownException.getMessage(), is(format("Failed to send Cohere completion request to [%s]", getUrl(webServer)))); + assertThat(thrownException.getMessage(), is("Failed to send Cohere completion request. Cause: failed")); } public void testExecute_ThrowsExceptionWithNullUrl() { @@ -288,7 +285,7 @@ public void testExecute_ThrowsExceptionWithNullUrl() { var thrownException = expectThrows(ElasticsearchException.class, () -> listener.actionGet(TIMEOUT)); - assertThat(thrownException.getMessage(), is("Failed to send Cohere completion request")); + assertThat(thrownException.getMessage(), is("Failed to send Cohere completion request. Cause: failed")); } public void testExecute_ThrowsException_WhenInputIsGreaterThanOne() throws IOException { @@ -346,7 +343,7 @@ public void testExecute_ThrowsException_WhenInputIsGreaterThanOne() throws IOExc private ExecutableAction createAction(String url, String apiKey, @Nullable String modelName, Sender sender) { var model = CohereCompletionModelTests.createModel(url, apiKey, modelName); var requestManager = CohereCompletionRequestManager.of(model, threadPool); - var failedToSendRequestErrorMessage = constructFailedToSendRequestMessage(model.getServiceSettings().uri(), "Cohere completion"); + var failedToSendRequestErrorMessage = constructFailedToSendRequestMessage("Cohere completion"); return new SingleInputSenderExecutableAction(sender, requestManager, failedToSendRequestErrorMessage, "Cohere completion"); } } diff --git a/x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/external/action/cohere/CohereEmbeddingsActionTests.java b/x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/external/action/cohere/CohereEmbeddingsActionTests.java index fe0eb782eddfc..5bd919e7bbc17 100644 --- a/x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/external/action/cohere/CohereEmbeddingsActionTests.java +++ b/x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/external/action/cohere/CohereEmbeddingsActionTests.java @@ -45,7 +45,6 @@ import java.util.Map; import java.util.concurrent.TimeUnit; -import static org.elasticsearch.core.Strings.format; import static org.elasticsearch.xpack.inference.Utils.inferenceUtilityPool; import static org.elasticsearch.xpack.inference.Utils.mockClusterServiceEmpty; import static org.elasticsearch.xpack.inference.external.action.ActionUtils.constructFailedToSendRequestMessage; @@ -272,8 +271,7 @@ public void testExecute_ThrowsElasticsearchException_WhenSenderOnFailureIsCalled var sender = mock(Sender.class); doAnswer(invocation -> { - @SuppressWarnings("unchecked") - ActionListener listener = (ActionListener) invocation.getArguments()[2]; + ActionListener listener = invocation.getArgument(3); listener.onFailure(new IllegalStateException("failed")); return Void.TYPE; @@ -286,18 +284,14 @@ public void testExecute_ThrowsElasticsearchException_WhenSenderOnFailureIsCalled var thrownException = expectThrows(ElasticsearchException.class, () -> listener.actionGet(TIMEOUT)); - MatcherAssert.assertThat( - thrownException.getMessage(), - is(format("Failed to send Cohere embeddings request to [%s]", getUrl(webServer))) - ); + MatcherAssert.assertThat(thrownException.getMessage(), is("Failed to send Cohere embeddings request. Cause: failed")); } public void testExecute_ThrowsElasticsearchException_WhenSenderOnFailureIsCalled_WhenUrlIsNull() { var sender = mock(Sender.class); doAnswer(invocation -> { - @SuppressWarnings("unchecked") - ActionListener listener = (ActionListener) invocation.getArguments()[2]; + ActionListener listener = invocation.getArgument(3); listener.onFailure(new IllegalStateException("failed")); return Void.TYPE; @@ -310,7 +304,7 @@ public void testExecute_ThrowsElasticsearchException_WhenSenderOnFailureIsCalled var thrownException = expectThrows(ElasticsearchException.class, () -> listener.actionGet(TIMEOUT)); - MatcherAssert.assertThat(thrownException.getMessage(), is("Failed to send Cohere embeddings request")); + MatcherAssert.assertThat(thrownException.getMessage(), is("Failed to send Cohere embeddings request. Cause: failed")); } public void testExecute_ThrowsException() { @@ -324,10 +318,7 @@ public void testExecute_ThrowsException() { var thrownException = expectThrows(ElasticsearchException.class, () -> listener.actionGet(TIMEOUT)); - MatcherAssert.assertThat( - thrownException.getMessage(), - is(format("Failed to send Cohere embeddings request to [%s]", getUrl(webServer))) - ); + MatcherAssert.assertThat(thrownException.getMessage(), is("Failed to send Cohere embeddings request. Cause: failed")); } public void testExecute_ThrowsExceptionWithNullUrl() { @@ -341,7 +332,7 @@ public void testExecute_ThrowsExceptionWithNullUrl() { var thrownException = expectThrows(ElasticsearchException.class, () -> listener.actionGet(TIMEOUT)); - MatcherAssert.assertThat(thrownException.getMessage(), is("Failed to send Cohere embeddings request")); + MatcherAssert.assertThat(thrownException.getMessage(), is("Failed to send Cohere embeddings request. Cause: failed")); } private ExecutableAction createAction( @@ -353,10 +344,7 @@ private ExecutableAction createAction( Sender sender ) { var model = CohereEmbeddingsModelTests.createModel(url, apiKey, taskSettings, 1024, 1024, modelName, embeddingType); - var failedToSendRequestErrorMessage = constructFailedToSendRequestMessage( - model.getServiceSettings().getCommonSettings().uri(), - "Cohere embeddings" - ); + var failedToSendRequestErrorMessage = constructFailedToSendRequestMessage("Cohere embeddings"); var requestCreator = CohereEmbeddingsRequestManager.of(model, threadPool); return new SenderExecutableAction(sender, requestCreator, failedToSendRequestErrorMessage); } diff --git a/x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/external/action/googleaistudio/GoogleAiStudioCompletionActionTests.java b/x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/external/action/googleaistudio/GoogleAiStudioCompletionActionTests.java index ff17bbf66e02a..0e0c9f8b8a0e3 100644 --- a/x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/external/action/googleaistudio/GoogleAiStudioCompletionActionTests.java +++ b/x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/external/action/googleaistudio/GoogleAiStudioCompletionActionTests.java @@ -39,7 +39,6 @@ import java.util.Map; import java.util.concurrent.TimeUnit; -import static org.elasticsearch.core.Strings.format; import static org.elasticsearch.xpack.inference.Utils.inferenceUtilityPool; import static org.elasticsearch.xpack.inference.Utils.mockClusterServiceEmpty; import static org.elasticsearch.xpack.inference.external.action.ActionUtils.constructFailedToSendRequestMessage; @@ -170,8 +169,7 @@ public void testExecute_ThrowsElasticsearchException_WhenSenderOnFailureIsCalled var sender = mock(Sender.class); doAnswer(invocation -> { - @SuppressWarnings("unchecked") - ActionListener listener = (ActionListener) invocation.getArguments()[2]; + ActionListener listener = invocation.getArgument(3); listener.onFailure(new IllegalStateException("failed")); return Void.TYPE; @@ -184,10 +182,7 @@ public void testExecute_ThrowsElasticsearchException_WhenSenderOnFailureIsCalled var thrownException = expectThrows(ElasticsearchException.class, () -> listener.actionGet(TIMEOUT)); - assertThat( - thrownException.getMessage(), - is(format("Failed to send Google AI Studio completion request to [%s]", getUrl(webServer))) - ); + assertThat(thrownException.getMessage(), is("Failed to send Google AI Studio completion request. Cause: failed")); } public void testExecute_ThrowsException() { @@ -201,10 +196,7 @@ public void testExecute_ThrowsException() { var thrownException = expectThrows(ElasticsearchException.class, () -> listener.actionGet(TIMEOUT)); - assertThat( - thrownException.getMessage(), - is(format("Failed to send Google AI Studio completion request to [%s]", getUrl(webServer))) - ); + assertThat(thrownException.getMessage(), is("Failed to send Google AI Studio completion request. Cause: failed")); } public void testExecute_ThrowsException_WhenInputIsGreaterThanOne() throws IOException { @@ -272,7 +264,7 @@ public void testExecute_ThrowsException_WhenInputIsGreaterThanOne() throws IOExc private ExecutableAction createAction(String url, String apiKey, String modelName, Sender sender) { var model = GoogleAiStudioCompletionModelTests.createModel(modelName, url, apiKey); var requestManager = new GoogleAiStudioCompletionRequestManager(model, threadPool); - var failedToSendRequestErrorMessage = constructFailedToSendRequestMessage(model.uri(false), "Google AI Studio completion"); + var failedToSendRequestErrorMessage = constructFailedToSendRequestMessage("Google AI Studio completion"); return new SingleInputSenderExecutableAction( sender, requestManager, diff --git a/x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/external/action/googleaistudio/GoogleAiStudioEmbeddingsActionTests.java b/x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/external/action/googleaistudio/GoogleAiStudioEmbeddingsActionTests.java index 27862f7309877..1cdce75d3ae0c 100644 --- a/x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/external/action/googleaistudio/GoogleAiStudioEmbeddingsActionTests.java +++ b/x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/external/action/googleaistudio/GoogleAiStudioEmbeddingsActionTests.java @@ -38,7 +38,6 @@ import java.util.Map; import java.util.concurrent.TimeUnit; -import static org.elasticsearch.core.Strings.format; import static org.elasticsearch.xpack.inference.Utils.inferenceUtilityPool; import static org.elasticsearch.xpack.inference.Utils.mockClusterServiceEmpty; import static org.elasticsearch.xpack.inference.external.action.ActionUtils.constructFailedToSendRequestMessage; @@ -150,8 +149,7 @@ public void testExecute_ThrowsElasticsearchException_WhenSenderOnFailureIsCalled var sender = mock(Sender.class); doAnswer(invocation -> { - @SuppressWarnings("unchecked") - ActionListener listener = (ActionListener) invocation.getArguments()[2]; + ActionListener listener = invocation.getArgument(3); listener.onFailure(new IllegalStateException("failed")); return Void.TYPE; @@ -164,10 +162,7 @@ public void testExecute_ThrowsElasticsearchException_WhenSenderOnFailureIsCalled var thrownException = expectThrows(ElasticsearchException.class, () -> listener.actionGet(TIMEOUT)); - assertThat( - thrownException.getMessage(), - is(format("Failed to send Google AI Studio embeddings request to [%s]", getUrl(webServer))) - ); + assertThat(thrownException.getMessage(), is("Failed to send Google AI Studio embeddings request. Cause: failed")); } public void testExecute_ThrowsException() { @@ -181,16 +176,13 @@ public void testExecute_ThrowsException() { var thrownException = expectThrows(ElasticsearchException.class, () -> listener.actionGet(TIMEOUT)); - assertThat( - thrownException.getMessage(), - is(format("Failed to send Google AI Studio embeddings request to [%s]", getUrl(webServer))) - ); + assertThat(thrownException.getMessage(), is("Failed to send Google AI Studio embeddings request. Cause: failed")); } private ExecutableAction createAction(String url, String apiKey, String modelName, Sender sender) { var model = createModel(modelName, apiKey, url); var requestManager = new GoogleAiStudioEmbeddingsRequestManager(model, TruncatorTests.createTruncator(), threadPool); - var failedToSendRequestErrorMessage = constructFailedToSendRequestMessage(model.uri(), "Google AI Studio embeddings"); + var failedToSendRequestErrorMessage = constructFailedToSendRequestMessage("Google AI Studio embeddings"); return new SenderExecutableAction(sender, requestManager, failedToSendRequestErrorMessage); } diff --git a/x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/external/action/googlevertexai/GoogleVertexAiEmbeddingsActionTests.java b/x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/external/action/googlevertexai/GoogleVertexAiEmbeddingsActionTests.java index edfc447d5337e..74d19803a5557 100644 --- a/x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/external/action/googlevertexai/GoogleVertexAiEmbeddingsActionTests.java +++ b/x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/external/action/googlevertexai/GoogleVertexAiEmbeddingsActionTests.java @@ -32,7 +32,6 @@ import java.util.List; import java.util.concurrent.TimeUnit; -import static org.elasticsearch.core.Strings.format; import static org.elasticsearch.xpack.inference.Utils.inferenceUtilityPool; import static org.elasticsearch.xpack.inference.Utils.mockClusterServiceEmpty; import static org.elasticsearch.xpack.inference.external.action.ActionUtils.constructFailedToSendRequestMessage; @@ -85,8 +84,7 @@ public void testExecute_ThrowsElasticsearchException_WhenSenderOnFailureIsCalled var sender = mock(Sender.class); doAnswer(invocation -> { - @SuppressWarnings("unchecked") - ActionListener listener = (ActionListener) invocation.getArguments()[2]; + ActionListener listener = invocation.getArgument(3); listener.onFailure(new IllegalStateException("failed")); return Void.TYPE; @@ -99,10 +97,7 @@ public void testExecute_ThrowsElasticsearchException_WhenSenderOnFailureIsCalled var thrownException = expectThrows(ElasticsearchException.class, () -> listener.actionGet(TIMEOUT)); - assertThat( - thrownException.getMessage(), - is(format("Failed to send Google Vertex AI embeddings request to [%s]", getUrl(webServer))) - ); + assertThat(thrownException.getMessage(), is("Failed to send Google Vertex AI embeddings request. Cause: failed")); } public void testExecute_ThrowsException() { @@ -116,16 +111,13 @@ public void testExecute_ThrowsException() { var thrownException = expectThrows(ElasticsearchException.class, () -> listener.actionGet(TIMEOUT)); - assertThat( - thrownException.getMessage(), - is(format("Failed to send Google Vertex AI embeddings request to [%s]", getUrl(webServer))) - ); + assertThat(thrownException.getMessage(), is("Failed to send Google Vertex AI embeddings request. Cause: failed")); } private ExecutableAction createAction(String url, String location, String projectId, String modelName, Sender sender) { var model = createModel(location, projectId, modelName, url, "{}"); var requestManager = new GoogleVertexAiEmbeddingsRequestManager(model, TruncatorTests.createTruncator(), threadPool); - var failedToSendRequestErrorMessage = constructFailedToSendRequestMessage(model.uri(), "Google Vertex AI embeddings"); + var failedToSendRequestErrorMessage = constructFailedToSendRequestMessage("Google Vertex AI embeddings"); return new SenderExecutableAction(sender, requestManager, failedToSendRequestErrorMessage); } diff --git a/x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/external/action/googlevertexai/GoogleVertexAiRerankActionTests.java b/x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/external/action/googlevertexai/GoogleVertexAiRerankActionTests.java index 491e17fc8c0a3..14704b3741eb8 100644 --- a/x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/external/action/googlevertexai/GoogleVertexAiRerankActionTests.java +++ b/x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/external/action/googlevertexai/GoogleVertexAiRerankActionTests.java @@ -32,7 +32,6 @@ import java.util.List; import java.util.concurrent.TimeUnit; -import static org.elasticsearch.core.Strings.format; import static org.elasticsearch.xpack.inference.Utils.inferenceUtilityPool; import static org.elasticsearch.xpack.inference.Utils.mockClusterServiceEmpty; import static org.elasticsearch.xpack.inference.external.action.ActionUtils.constructFailedToSendRequestMessage; @@ -83,8 +82,7 @@ public void testExecute_ThrowsElasticsearchException_WhenSenderOnFailureIsCalled var sender = mock(Sender.class); doAnswer(invocation -> { - @SuppressWarnings("unchecked") - ActionListener listener = (ActionListener) invocation.getArguments()[2]; + ActionListener listener = invocation.getArgument(3); listener.onFailure(new IllegalStateException("failed")); return Void.TYPE; @@ -97,7 +95,7 @@ public void testExecute_ThrowsElasticsearchException_WhenSenderOnFailureIsCalled var thrownException = expectThrows(ElasticsearchException.class, () -> listener.actionGet(TIMEOUT)); - assertThat(thrownException.getMessage(), is(format("Failed to send Google Vertex AI rerank request to [%s]", getUrl(webServer)))); + assertThat(thrownException.getMessage(), is("Failed to send Google Vertex AI rerank request. Cause: failed")); } public void testExecute_ThrowsException() { @@ -111,12 +109,12 @@ public void testExecute_ThrowsException() { var thrownException = expectThrows(ElasticsearchException.class, () -> listener.actionGet(TIMEOUT)); - assertThat(thrownException.getMessage(), is(format("Failed to send Google Vertex AI rerank request to [%s]", getUrl(webServer)))); + assertThat(thrownException.getMessage(), is("Failed to send Google Vertex AI rerank request. Cause: failed")); } private ExecutableAction createAction(String url, String projectId, Sender sender) { var model = GoogleVertexAiRerankModelTests.createModel(url, projectId, null); - var failedToSendRequestErrorMessage = constructFailedToSendRequestMessage(model.uri(), "Google Vertex AI rerank"); + var failedToSendRequestErrorMessage = constructFailedToSendRequestMessage("Google Vertex AI rerank"); var requestManager = GoogleVertexAiRerankRequestManager.of(model, threadPool); return new SenderExecutableAction(sender, requestManager, failedToSendRequestErrorMessage); } diff --git a/x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/external/action/huggingface/HuggingFaceActionTests.java b/x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/external/action/huggingface/HuggingFaceActionTests.java index 848ca790d677d..3ea49cbfabe59 100644 --- a/x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/external/action/huggingface/HuggingFaceActionTests.java +++ b/x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/external/action/huggingface/HuggingFaceActionTests.java @@ -72,8 +72,7 @@ public void testExecute_ThrowsElasticsearchException_WhenSenderOnFailureIsCalled var sender = mock(Sender.class); doAnswer(invocation -> { - @SuppressWarnings("unchecked") - ActionListener listener = (ActionListener) invocation.getArguments()[2]; + ActionListener listener = invocation.getArgument(3); listener.onFailure(new IllegalStateException("failed")); return Void.TYPE; @@ -88,7 +87,7 @@ public void testExecute_ThrowsElasticsearchException_WhenSenderOnFailureIsCalled assertThat( thrownException.getMessage(), - is(format("Failed to send Hugging Face test action request from inference entity id [%s]", "inferenceEntityId")) + is(format("Failed to send Hugging Face test action request from inference entity id [%s]. Cause: failed", "inferenceEntityId")) ); } @@ -105,7 +104,7 @@ public void testExecute_ThrowsException() { assertThat( thrownException.getMessage(), - is(format("Failed to send Hugging Face test action request from inference entity id [%s]", "inferenceEntityId")) + is(format("Failed to send Hugging Face test action request from inference entity id [%s]. Cause: failed", "inferenceEntityId")) ); } diff --git a/x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/external/action/ibmwatsonx/IbmWatsonxEmbeddingsActionTests.java b/x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/external/action/ibmwatsonx/IbmWatsonxEmbeddingsActionTests.java index f43bb1e10e08b..7ac400667a819 100644 --- a/x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/external/action/ibmwatsonx/IbmWatsonxEmbeddingsActionTests.java +++ b/x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/external/action/ibmwatsonx/IbmWatsonxEmbeddingsActionTests.java @@ -43,7 +43,6 @@ import java.util.Map; import java.util.concurrent.TimeUnit; -import static org.elasticsearch.core.Strings.format; import static org.elasticsearch.xpack.inference.Utils.inferenceUtilityPool; import static org.elasticsearch.xpack.inference.Utils.mockClusterServiceEmpty; import static org.elasticsearch.xpack.inference.external.action.ActionUtils.constructFailedToSendRequestMessage; @@ -155,8 +154,7 @@ public void testExecute_ThrowsElasticsearchException_WhenSenderOnFailureIsCalled var apiVersion = "apiVersion"; doAnswer(invocation -> { - @SuppressWarnings("unchecked") - ActionListener listener = (ActionListener) invocation.getArguments()[2]; + ActionListener listener = invocation.getArgument(3); listener.onFailure(new IllegalStateException("failed")); return Void.TYPE; @@ -169,7 +167,7 @@ public void testExecute_ThrowsElasticsearchException_WhenSenderOnFailureIsCalled var thrownException = expectThrows(ElasticsearchException.class, () -> listener.actionGet(TIMEOUT)); - assertThat(thrownException.getMessage(), is(format("Failed to send IBM Watsonx embeddings request to [%s]", getUrl(webServer)))); + assertThat(thrownException.getMessage(), is("Failed to send IBM Watsonx embeddings request. Cause: failed")); } public void testExecute_ThrowsException() { @@ -189,7 +187,7 @@ public void testExecute_ThrowsException() { var thrownException = expectThrows(ElasticsearchException.class, () -> listener.actionGet(TIMEOUT)); - assertThat(thrownException.getMessage(), is(format("Failed to send IBM Watsonx embeddings request to [%s]", getUrl(webServer)))); + assertThat(thrownException.getMessage(), is("Failed to send IBM Watsonx embeddings request. Cause: failed")); } private ExecutableAction createAction( @@ -203,7 +201,7 @@ private ExecutableAction createAction( ) { var model = createModel(modelName, projectId, uri, apiVersion, apiKey, url); var requestManager = new IbmWatsonxEmbeddingsRequestManagerWithoutAuth(model, TruncatorTests.createTruncator(), threadPool); - var failedToSendRequestErrorMessage = constructFailedToSendRequestMessage(model.uri(), "IBM Watsonx embeddings"); + var failedToSendRequestErrorMessage = constructFailedToSendRequestMessage("IBM Watsonx embeddings"); return new SenderExecutableAction(sender, requestManager, failedToSendRequestErrorMessage); } diff --git a/x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/external/action/openai/OpenAiActionCreatorTests.java b/x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/external/action/openai/OpenAiActionCreatorTests.java index 8ea7e6c2bdb8d..2b2c9d0c3260d 100644 --- a/x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/external/action/openai/OpenAiActionCreatorTests.java +++ b/x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/external/action/openai/OpenAiActionCreatorTests.java @@ -273,9 +273,13 @@ public void testCreate_OpenAiEmbeddingsModel_FailsFromInvalidResponseFormat() th PlainActionFuture listener = new PlainActionFuture<>(); action.execute(new DocumentsOnlyInput(List.of("abc")), InferenceAction.Request.DEFAULT_TIMEOUT, listener); + var failureCauseMessage = "Failed to find required field [data] in OpenAI embeddings response"; var thrownException = expectThrows(ElasticsearchStatusException.class, () -> listener.actionGet(TIMEOUT)); - assertThat(thrownException.getMessage(), is(format("Failed to send OpenAI embeddings request to [%s]", getUrl(webServer)))); - assertThat(thrownException.getCause().getMessage(), is("Failed to find required field [data] in OpenAI embeddings response")); + assertThat( + thrownException.getMessage(), + is(format("Failed to send OpenAI embeddings request. Cause: %s", failureCauseMessage)) + ); + assertThat(thrownException.getCause().getMessage(), is(failureCauseMessage)); assertThat(webServer.requests(), hasSize(1)); assertNull(webServer.requests().get(0).getUri().getQuery()); @@ -529,15 +533,13 @@ public void testCreate_OpenAiChatCompletionModel_FailsFromInvalidResponseFormat( PlainActionFuture listener = new PlainActionFuture<>(); action.execute(new ChatCompletionInput(List.of("abc")), InferenceAction.Request.DEFAULT_TIMEOUT, listener); + var failureCauseMessage = "Failed to find required field [choices] in OpenAI chat completions response"; var thrownException = expectThrows(ElasticsearchStatusException.class, () -> listener.actionGet(TIMEOUT)); assertThat( thrownException.getMessage(), - is(format("Failed to send OpenAI chat completions request to [%s]", getUrl(webServer))) - ); - assertThat( - thrownException.getCause().getMessage(), - is("Failed to find required field [choices] in OpenAI chat completions response") + is(format("Failed to send OpenAI chat completions request. Cause: %s", failureCauseMessage)) ); + assertThat(thrownException.getCause().getMessage(), is(failureCauseMessage)); assertThat(webServer.requests(), hasSize(1)); assertNull(webServer.requests().get(0).getUri().getQuery()); diff --git a/x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/external/action/openai/OpenAiChatCompletionActionTests.java b/x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/external/action/openai/OpenAiChatCompletionActionTests.java index e248f77fe7728..c96372eadfbc2 100644 --- a/x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/external/action/openai/OpenAiChatCompletionActionTests.java +++ b/x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/external/action/openai/OpenAiChatCompletionActionTests.java @@ -41,7 +41,6 @@ import java.util.Map; import java.util.concurrent.TimeUnit; -import static org.elasticsearch.core.Strings.format; import static org.elasticsearch.xpack.inference.Utils.inferenceUtilityPool; import static org.elasticsearch.xpack.inference.Utils.mockClusterServiceEmpty; import static org.elasticsearch.xpack.inference.external.action.ActionUtils.constructFailedToSendRequestMessage; @@ -171,8 +170,7 @@ public void testExecute_ThrowsElasticsearchException_WhenSenderOnFailureIsCalled var sender = mock(Sender.class); doAnswer(invocation -> { - @SuppressWarnings("unchecked") - ActionListener listener = (ActionListener) invocation.getArguments()[2]; + ActionListener listener = invocation.getArgument(3); listener.onFailure(new IllegalStateException("failed")); return Void.TYPE; @@ -185,15 +183,14 @@ public void testExecute_ThrowsElasticsearchException_WhenSenderOnFailureIsCalled var thrownException = expectThrows(ElasticsearchException.class, () -> listener.actionGet(TIMEOUT)); - assertThat(thrownException.getMessage(), is(format("Failed to send OpenAI chat completions request to [%s]", getUrl(webServer)))); + assertThat(thrownException.getMessage(), is("Failed to send OpenAI chat completions request. Cause: failed")); } public void testExecute_ThrowsElasticsearchException_WhenSenderOnFailureIsCalled_WhenUrlIsNull() { var sender = mock(Sender.class); doAnswer(invocation -> { - @SuppressWarnings("unchecked") - ActionListener listener = (ActionListener) invocation.getArguments()[2]; + ActionListener listener = invocation.getArgument(3); listener.onFailure(new IllegalStateException("failed")); return Void.TYPE; @@ -206,7 +203,7 @@ public void testExecute_ThrowsElasticsearchException_WhenSenderOnFailureIsCalled var thrownException = expectThrows(ElasticsearchException.class, () -> listener.actionGet(TIMEOUT)); - assertThat(thrownException.getMessage(), is("Failed to send OpenAI chat completions request")); + assertThat(thrownException.getMessage(), is("Failed to send OpenAI chat completions request. Cause: failed")); } public void testExecute_ThrowsException() { @@ -220,7 +217,7 @@ public void testExecute_ThrowsException() { var thrownException = expectThrows(ElasticsearchException.class, () -> listener.actionGet(TIMEOUT)); - assertThat(thrownException.getMessage(), is(format("Failed to send OpenAI chat completions request to [%s]", getUrl(webServer)))); + assertThat(thrownException.getMessage(), is("Failed to send OpenAI chat completions request. Cause: failed")); } public void testExecute_ThrowsExceptionWithNullUrl() { @@ -234,7 +231,7 @@ public void testExecute_ThrowsExceptionWithNullUrl() { var thrownException = expectThrows(ElasticsearchException.class, () -> listener.actionGet(TIMEOUT)); - assertThat(thrownException.getMessage(), is("Failed to send OpenAI chat completions request")); + assertThat(thrownException.getMessage(), is("Failed to send OpenAI chat completions request. Cause: failed")); } public void testExecute_ThrowsException_WhenInputIsGreaterThanOne() throws IOException { @@ -286,7 +283,7 @@ public void testExecute_ThrowsException_WhenInputIsGreaterThanOne() throws IOExc private ExecutableAction createAction(String url, String org, String apiKey, String modelName, @Nullable String user, Sender sender) { var model = createCompletionModel(url, org, apiKey, modelName, user); var requestCreator = OpenAiCompletionRequestManager.of(model, threadPool); - var errorMessage = constructFailedToSendRequestMessage(model.getServiceSettings().uri(), "OpenAI chat completions"); + var errorMessage = constructFailedToSendRequestMessage("OpenAI chat completions"); return new SingleInputSenderExecutableAction(sender, requestCreator, errorMessage, "OpenAI chat completions"); } } diff --git a/x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/external/action/openai/OpenAiEmbeddingsActionTests.java b/x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/external/action/openai/OpenAiEmbeddingsActionTests.java index 509dd144a1d1f..c8a0e1c398d4b 100644 --- a/x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/external/action/openai/OpenAiEmbeddingsActionTests.java +++ b/x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/external/action/openai/OpenAiEmbeddingsActionTests.java @@ -38,7 +38,6 @@ import java.util.List; import java.util.concurrent.TimeUnit; -import static org.elasticsearch.core.Strings.format; import static org.elasticsearch.xpack.inference.Utils.inferenceUtilityPool; import static org.elasticsearch.xpack.inference.Utils.mockClusterServiceEmpty; import static org.elasticsearch.xpack.inference.external.action.ActionUtils.constructFailedToSendRequestMessage; @@ -158,8 +157,7 @@ public void testExecute_ThrowsElasticsearchException_WhenSenderOnFailureIsCalled var sender = mock(Sender.class); doAnswer(invocation -> { - @SuppressWarnings("unchecked") - ActionListener listener = (ActionListener) invocation.getArguments()[2]; + ActionListener listener = invocation.getArgument(3); listener.onFailure(new IllegalStateException("failed")); return Void.TYPE; @@ -172,15 +170,14 @@ public void testExecute_ThrowsElasticsearchException_WhenSenderOnFailureIsCalled var thrownException = expectThrows(ElasticsearchException.class, () -> listener.actionGet(TIMEOUT)); - assertThat(thrownException.getMessage(), is(format("Failed to send OpenAI embeddings request to [%s]", getUrl(webServer)))); + assertThat(thrownException.getMessage(), is("Failed to send OpenAI embeddings request. Cause: failed")); } public void testExecute_ThrowsElasticsearchException_WhenSenderOnFailureIsCalled_WhenUrlIsNull() { var sender = mock(Sender.class); doAnswer(invocation -> { - @SuppressWarnings("unchecked") - ActionListener listener = (ActionListener) invocation.getArguments()[2]; + ActionListener listener = invocation.getArgument(3); listener.onFailure(new IllegalStateException("failed")); return Void.TYPE; @@ -193,7 +190,7 @@ public void testExecute_ThrowsElasticsearchException_WhenSenderOnFailureIsCalled var thrownException = expectThrows(ElasticsearchException.class, () -> listener.actionGet(TIMEOUT)); - assertThat(thrownException.getMessage(), is("Failed to send OpenAI embeddings request")); + assertThat(thrownException.getMessage(), is("Failed to send OpenAI embeddings request. Cause: failed")); } public void testExecute_ThrowsException() { @@ -207,7 +204,7 @@ public void testExecute_ThrowsException() { var thrownException = expectThrows(ElasticsearchException.class, () -> listener.actionGet(TIMEOUT)); - assertThat(thrownException.getMessage(), is(format("Failed to send OpenAI embeddings request to [%s]", getUrl(webServer)))); + assertThat(thrownException.getMessage(), is("Failed to send OpenAI embeddings request. Cause: failed")); } public void testExecute_ThrowsExceptionWithNullUrl() { @@ -221,13 +218,13 @@ public void testExecute_ThrowsExceptionWithNullUrl() { var thrownException = expectThrows(ElasticsearchException.class, () -> listener.actionGet(TIMEOUT)); - assertThat(thrownException.getMessage(), is("Failed to send OpenAI embeddings request")); + assertThat(thrownException.getMessage(), is("Failed to send OpenAI embeddings request. Cause: failed")); } private ExecutableAction createAction(String url, String org, String apiKey, String modelName, @Nullable String user, Sender sender) { var model = createModel(url, org, apiKey, modelName, user); var requestCreator = OpenAiEmbeddingsRequestManager.of(model, TruncatorTests.createTruncator(), threadPool); - var errorMessage = constructFailedToSendRequestMessage(model.getServiceSettings().uri(), "OpenAI embeddings"); + var errorMessage = constructFailedToSendRequestMessage("OpenAI embeddings"); return new SenderExecutableAction(sender, requestCreator, errorMessage); } diff --git a/x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/external/action/voyageai/VoyageAIEmbeddingsActionTests.java b/x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/external/action/voyageai/VoyageAIEmbeddingsActionTests.java index 3b3397f702a64..a19956bc6bda7 100644 --- a/x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/external/action/voyageai/VoyageAIEmbeddingsActionTests.java +++ b/x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/external/action/voyageai/VoyageAIEmbeddingsActionTests.java @@ -44,7 +44,6 @@ import java.util.Map; import java.util.concurrent.TimeUnit; -import static org.elasticsearch.core.Strings.format; import static org.elasticsearch.xpack.inference.Utils.inferenceUtilityPool; import static org.elasticsearch.xpack.inference.Utils.mockClusterServiceEmpty; import static org.elasticsearch.xpack.inference.external.action.ActionUtils.constructFailedToSendRequestMessage; @@ -324,8 +323,7 @@ public void testExecute_ThrowsElasticsearchException_WhenSenderOnFailureIsCalled var sender = mock(Sender.class); doAnswer(invocation -> { - @SuppressWarnings("unchecked") - ActionListener listener = (ActionListener) invocation.getArguments()[2]; + ActionListener listener = invocation.getArgument(3); listener.onFailure(new IllegalStateException("failed")); return Void.TYPE; @@ -338,18 +336,14 @@ public void testExecute_ThrowsElasticsearchException_WhenSenderOnFailureIsCalled var thrownException = expectThrows(ElasticsearchException.class, () -> listener.actionGet(TIMEOUT)); - MatcherAssert.assertThat( - thrownException.getMessage(), - is(format("Failed to send VoyageAI embeddings request to [%s]", getUrl(webServer))) - ); + MatcherAssert.assertThat(thrownException.getMessage(), is("Failed to send VoyageAI embeddings request. Cause: failed")); } public void testExecute_ThrowsElasticsearchException_WhenSenderOnFailureIsCalled_WhenUrlIsNull() { var sender = mock(Sender.class); doAnswer(invocation -> { - @SuppressWarnings("unchecked") - ActionListener listener = (ActionListener) invocation.getArguments()[2]; + ActionListener listener = invocation.getArgument(3); listener.onFailure(new IllegalStateException("failed")); return Void.TYPE; @@ -362,7 +356,7 @@ public void testExecute_ThrowsElasticsearchException_WhenSenderOnFailureIsCalled var thrownException = expectThrows(ElasticsearchException.class, () -> listener.actionGet(TIMEOUT)); - MatcherAssert.assertThat(thrownException.getMessage(), is("Failed to send VoyageAI embeddings request")); + MatcherAssert.assertThat(thrownException.getMessage(), is("Failed to send VoyageAI embeddings request. Cause: failed")); } public void testExecute_ThrowsException() { @@ -376,10 +370,7 @@ public void testExecute_ThrowsException() { var thrownException = expectThrows(ElasticsearchException.class, () -> listener.actionGet(TIMEOUT)); - MatcherAssert.assertThat( - thrownException.getMessage(), - is(format("Failed to send VoyageAI embeddings request to [%s]", getUrl(webServer))) - ); + MatcherAssert.assertThat(thrownException.getMessage(), is("Failed to send VoyageAI embeddings request. Cause: failed")); } public void testExecute_ThrowsExceptionWithNullUrl() { @@ -393,7 +384,7 @@ public void testExecute_ThrowsExceptionWithNullUrl() { var thrownException = expectThrows(ElasticsearchException.class, () -> listener.actionGet(TIMEOUT)); - MatcherAssert.assertThat(thrownException.getMessage(), is("Failed to send VoyageAI embeddings request")); + MatcherAssert.assertThat(thrownException.getMessage(), is("Failed to send VoyageAI embeddings request. Cause: failed")); } private ExecutableAction createAction( @@ -405,7 +396,7 @@ private ExecutableAction createAction( Sender sender ) { var model = VoyageAIEmbeddingsModelTests.createModel(url, apiKey, taskSettings, 1024, 1024, modelName, embeddingType); - var failedToSendRequestErrorMessage = constructFailedToSendRequestMessage(model.uri(), "VoyageAI embeddings"); + var failedToSendRequestErrorMessage = constructFailedToSendRequestMessage("VoyageAI embeddings"); var requestCreator = VoyageAIEmbeddingsRequestManager.of(model, threadPool); return new SenderExecutableAction(sender, requestCreator, failedToSendRequestErrorMessage); }