Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
82 commits
Select commit Hold shift + click to select a range
d93057b
Add blueprint for semantic highlighter model on AWS Sagemaker (#3879)
junqiu-lei Jun 24, 2025
c9b5342
add multi modal tutorial using ml inference processor (#3576)
mingshl Jun 25, 2025
b8becf6
Increment version to 3.2.0-SNAPSHOT (#3942)
opensearch-trigger-bot[bot] Jun 25, 2025
25d86f3
increase mcp code coverage and address comments in PR: #3883 (#3908)
zane-neo Jun 27, 2025
a894ff1
fix: change log level (#3948)
pyek-bot Jun 30, 2025
0374222
[Enhancement] Enhance validation for create connector API (#3579)
akolarkunnu Jul 1, 2025
8fff3f3
run auto deploy remote model in partially deployed status (#3423)
Zhangxunmt Jul 2, 2025
d46a49f
Fix exposed connector URL in error message (#3953)
rithin-pullela-aws Jul 3, 2025
23b98cc
Fix is_async status of agent execution task (#3960)
rithin-pullela-aws Jul 3, 2025
f458d01
Add Documentation for creating Neural Sparse Remote Model (#3857)
zhichao-aws Jul 8, 2025
5b8b53b
Add tutorials for language_identification during ingest (#3966)
mingshl Jul 12, 2025
e3d9019
fix the error status code and message for empty response (#3968)
Zhangxunmt Jul 15, 2025
90965f6
Keep .plugins-ml-config index for Integration test (#3989)
Hailong-am Jul 17, 2025
93bc9a3
Add validation for creating uri in connectors (#3972)
mingshl Jul 17, 2025
c5229ca
Fix update model config invalid error (#3994)
nathaliellenaa Jul 18, 2025
85bbcb1
[Enhancements] Sparse encoding/tokenize support TOKEN_ID format embed…
zhichao-aws Jul 21, 2025
7040e8a
Fix class cast exception for execute API (#4010)
owaiskazi19 Jul 29, 2025
7eb0d80
Bump gradle to 8.14 and update JDK to 24 (#3983)
pyek-bot Jul 30, 2025
b6ae5f8
notebook for step by step in multi-modal search in ml-inference proce…
dhrubo-os Jul 31, 2025
0db22c9
fix: update lombok version for jdk24 (#4026)
pyek-bot Aug 1, 2025
6e3656d
Add support for date time injection for agents (#4008)
pyek-bot Aug 1, 2025
f6a68bf
Ensure chat agent returns response when max iterations are reached (#…
pyek-bot Aug 1, 2025
38ea2fc
fixing unit test (#4037)
dhrubo-os Aug 2, 2025
943ef8c
[ExceptionHandling] Throw proper 400 errors instead of 500 for agent …
pyek-bot Aug 2, 2025
83c0dcd
Update link to the model in the aleph alpha blueprint (#3980) (#4042)
opensearch-trigger-bot[bot] Aug 2, 2025
443a405
enhance tool input parsing and add agentic rag tutorial (#4023)
ylwu-amzn Aug 2, 2025
606639a
add agentic rag tutorial (#4045)
ylwu-amzn Aug 3, 2025
fb71867
Initiate query planning tool (#4006)
mingshl Aug 3, 2025
5cd4c96
[FIX] allow partial updates to llm and memory fields in MLAgentUpdate…
jiapingzeng Aug 3, 2025
a39dd33
Expose message history limit for PER Agent (#4016)
pyek-bot Aug 4, 2025
d327c51
Fix delete connector/model group exception handling (#4044)
nathaliellenaa Aug 4, 2025
068658c
Add Execute Tool API (#4035)
nathaliellenaa Aug 4, 2025
3fa3a1e
Implement create and add memory container API (#4050)
b4sjoo Aug 4, 2025
aed8983
adding unit tests for create and get memory container functionalities…
dhrubo-os Aug 4, 2025
0cad46a
adding more unit tests and upgrading jacoco (#4057)
dhrubo-os Aug 5, 2025
7f4252b
updating gradle version (#4064)
dhrubo-os Aug 5, 2025
6cd0beb
Add Default System Prompt for the query Planner tool (#4046)
rithin-pullela-aws Aug 5, 2025
4f886c7
feat: tuning PER prompts
pyek-bot Aug 5, 2025
c69d164
feat: spotlessapply
pyek-bot Aug 5, 2025
883e95d
fix: test
pyek-bot Aug 5, 2025
4b4b409
CVE fix: beanutils (#4062)
pyek-bot Aug 6, 2025
145f9f8
Add feature flag for agentic search (#4021)
rithin-pullela-aws Aug 6, 2025
8c91e14
Support output filter, unify tool parameter handling and improve Sear…
ylwu-amzn Aug 6, 2025
974b418
Enable AI-Oriented memory operation on Memory APIs (Add, Search, Upda…
b4sjoo Aug 6, 2025
4122b38
Ensure tool failures are returned back to the agent (#4052)
pyek-bot Aug 6, 2025
02601dc
adding feature flag for agentic memory (#4067)
dhrubo-os Aug 6, 2025
de3df61
Delete Memory Container API (#4027)
nathaliellenaa Aug 6, 2025
2916b8d
Add feature flag to delete mem container (#4072)
nathaliellenaa Aug 6, 2025
f7a821e
GET memory API (#4069)
rithin-pullela-aws Aug 6, 2025
d6c7983
[3.2] Release notes (#4073)
pyek-bot Aug 6, 2025
7ade595
adding feature settings for all the agentic memory apis (#4074)
dhrubo-os Aug 6, 2025
608b8dd
MLAgentTracer Class (#3946)
chriswlai Jul 15, 2025
51e2ac3
Plan-Execute-Reflect Agent Tracing (#3964)
chriswlai Aug 4, 2025
e2898fd
Conversational Agent Tracing (#3969)
chriswlai Aug 6, 2025
aa7952a
tracing rebased to main
chriswlai Aug 7, 2025
e33c8d4
fix tests and use 3.1
chriswlai Aug 7, 2025
e9ff3cd
Connector and Model Tracing (#4004)
chriswlai Aug 7, 2025
42cbebd
Conversational Flow and Flow Agent Tracing #3969 (#3976)
chriswlai Aug 8, 2025
718f4a9
rebase with all tracing
chriswlai Aug 8, 2025
85403d2
revert to 3.2
chriswlai Aug 8, 2025
8598ede
MLAgentTracer Class (#3946)
chriswlai Jul 15, 2025
442879f
adding agent tracing to mlplugin
chriswlai Jun 26, 2025
c263e19
add tests
chriswlai Jun 26, 2025
2c39700
cr fixes
chriswlai Jun 26, 2025
c34f040
spotlessApply
chriswlai Jun 26, 2025
548fb1a
add tests
chriswlai Jul 2, 2025
19c3c62
P-E-R tracing
chriswlai Jul 7, 2025
02cecfc
conversational agent tracing
chriswlai Jul 8, 2025
5019a64
storage and visualization tutorial
chriswlai Jul 9, 2025
beb3fab
clean updates
chriswlai Jul 14, 2025
2515b92
fixes
chriswlai Jul 14, 2025
12693f3
rebase
chriswlai Jul 15, 2025
bfe49f9
remove extra edits
chriswlai Jul 15, 2025
ce54f8c
update docs
chriswlai Jul 28, 2025
7b0eb61
add index mapping to tutorial
chriswlai Aug 1, 2025
166f85a
updating tutorial
chriswlai Aug 7, 2025
fff0c0b
improve tutorial
chriswlai Aug 8, 2025
4b494cc
add sec disable
chriswlai Aug 8, 2025
842a432
consistent versions
chriswlai Aug 8, 2025
cc41762
add otel install for non-docker
chriswlai Aug 8, 2025
37eac94
address mroe comments
chriswlai Aug 8, 2025
c60fba1
update
chriswlai Aug 9, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
6 changes: 3 additions & 3 deletions .github/workflows/CI-workflow.yml
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ jobs:
needs: [Get-Require-Approval, Get-CI-Image-Tag, spotless]
strategy:
matrix:
java: [21, 23]
java: [21, 24]

name: Build and Test MLCommons Plugin on linux
if: github.repository == 'opensearch-project/ml-commons'
Expand Down Expand Up @@ -107,7 +107,7 @@ jobs:
needs: [Get-Require-Approval, Build-ml-linux, spotless]
strategy:
matrix:
java: [21, 23]
java: [21, 24]

name: Test MLCommons Plugin on linux docker
if: github.repository == 'opensearch-project/ml-commons'
Expand Down Expand Up @@ -203,7 +203,7 @@ jobs:
Build-ml-windows:
strategy:
matrix:
java: [21, 23]
java: [21, 24]
name: Build and Test MLCommons Plugin on Windows
if: github.repository == 'opensearch-project/ml-commons'
needs: [Get-Require-Approval, spotless]
Expand Down
8 changes: 4 additions & 4 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ buildscript {
ext {
opensearch_group = "org.opensearch"
isSnapshot = "true" == System.getProperty("build.snapshot", "true")
opensearch_version = System.getProperty("opensearch.version", "3.1.0-SNAPSHOT")
opensearch_version = System.getProperty("opensearch.version", "3.2.0-SNAPSHOT")
buildVersionQualifier = System.getProperty("build.version_qualifier", "")
asm_version = "9.7"

Expand Down Expand Up @@ -60,9 +60,9 @@ buildscript {
}

plugins {
id 'com.netflix.nebula.ospackage' version "11.5.0"
id 'com.netflix.nebula.ospackage' version "12.0.0"
id 'java'
id "io.freefair.lombok" version "8.4"
id "io.freefair.lombok" version "8.14"
id 'jacoco'
}

Expand All @@ -80,7 +80,7 @@ allprojects {
}

plugins.withId('jacoco') {
jacoco.toolVersion = '0.8.12'
jacoco.toolVersion = '0.8.13'
}

project.getExtensions().getExtraProperties().set("versions", VersionProperties.getVersions());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -214,7 +214,7 @@ public void registerModelGroup(
@Override
public void execute(FunctionName name, Input input, ActionListener<MLExecuteTaskResponse> listener) {
MLExecuteTaskRequest mlExecuteTaskRequest = new MLExecuteTaskRequest(name, input);
client.execute(MLExecuteTaskAction.INSTANCE, mlExecuteTaskRequest, listener);
client.execute(MLExecuteTaskAction.INSTANCE, mlExecuteTaskRequest, getMLExecuteResponseActionListener(listener));
}

@Override
Expand Down Expand Up @@ -345,6 +345,10 @@ private ActionListener<MLRegisterAgentResponse> getMLRegisterAgentResponseAction
return wrapActionListener(listener, MLRegisterAgentResponse::fromActionResponse);
}

private ActionListener<MLExecuteTaskResponse> getMLExecuteResponseActionListener(ActionListener<MLExecuteTaskResponse> listener) {
return wrapActionListener(listener, MLExecuteTaskResponse::fromActionResponse);
}

private ActionListener<MLTaskGetResponse> getMLTaskResponseActionListener(ActionListener<MLTask> listener) {
ActionListener<MLTaskGetResponse> internalListener = ActionListener
.wrap(getResponse -> { listener.onResponse(getResponse.getMlTask()); }, listener::onFailure);
Expand Down
2 changes: 1 addition & 1 deletion common/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ dependencies {
}

lombok {
version = "1.18.30"
version = "1.18.38"
}

jacocoTestReport {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
/*
*
* * Copyright OpenSearch Contributors
* * SPDX-License-Identifier: Apache-2.0
*
* Copyright OpenSearch Contributors
* SPDX-License-Identifier: Apache-2.0
*/

package org.opensearch.ml.common;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ public class CommonValue {
public static final String ML_AGENT_INDEX = ".plugins-ml-agent";
public static final String ML_MEMORY_META_INDEX = ".plugins-ml-memory-meta";
public static final String ML_MEMORY_MESSAGE_INDEX = ".plugins-ml-memory-message";
public static final String ML_MEMORY_CONTAINER_INDEX = ".plugins-ml-memory-container";
public static final String ML_STOP_WORDS_INDEX = ".plugins-ml-stop-words";
// index used in 2.19 to track MlTaskBatchUpdate task
public static final String TASK_POLLING_JOB_INDEX = ".ml_commons_task_polling_job";
Expand All @@ -63,6 +64,7 @@ public class CommonValue {
public static final String ML_AGENT_INDEX_MAPPING_PATH = "index-mappings/ml_agent.json";
public static final String ML_MEMORY_META_INDEX_MAPPING_PATH = "index-mappings/ml_memory_meta.json";
public static final String ML_MEMORY_MESSAGE_INDEX_MAPPING_PATH = "index-mappings/ml_memory_message.json";
public static final String ML_MEMORY_CONTAINER_INDEX_MAPPING_PATH = "index-mappings/ml_memory_container.json";
public static final String ML_MCP_SESSION_MANAGEMENT_INDEX_MAPPING_PATH = "index-mappings/ml_mcp_session_management.json";
public static final String ML_MCP_TOOLS_INDEX_MAPPING_PATH = "index-mappings/ml_mcp_tools.json";
public static final String ML_JOBS_INDEX_MAPPING_PATH = "index-mappings/ml_jobs.json";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,8 @@ public enum FunctionName {
TEXT_SIMILARITY,
QUESTION_ANSWERING,
AGENT,
CONNECTOR;
CONNECTOR,
TOOL;

public static FunctionName from(String value) {
try {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,8 @@
import org.opensearch.ml.common.output.MLOutputType;
import org.reflections.Reflections;

import com.fasterxml.jackson.core.JsonParseException;

import lombok.extern.log4j.Log4j2;

@Log4j2
Expand Down Expand Up @@ -255,16 +257,18 @@ public static boolean canInitMLInput(FunctionName functionName) {
return mlInputClassMap.containsKey(functionName);
}

public static <S> S initConnector(String name, Object[] initArgs, Class<?>... constructorParameterTypes) {
public static <S> S initConnector(String name, Object[] initArgs, Class<?>... constructorParameterTypes) throws JsonParseException {
return init(connectorClassMap, name, initArgs, constructorParameterTypes);
}

@SuppressWarnings("unchecked")
public static <T extends Enum<T>, S> S initMLInput(T type, Object[] initArgs, Class<?>... constructorParameterTypes) {
public static <T extends Enum<T>, S> S initMLInput(T type, Object[] initArgs, Class<?>... constructorParameterTypes)
throws JsonParseException {
return init(mlInputClassMap, type, initArgs, constructorParameterTypes);
}

private static <T, S> S init(Map<T, Class<?>> map, T type, Object[] initArgs, Class<?>... constructorParameterTypes) {
private static <T, S> S init(Map<T, Class<?>> map, T type, Object[] initArgs, Class<?>... constructorParameterTypes)
throws JsonParseException {
Class<?> clazz = map.get(type);
if (clazz == null) {
throw new IllegalArgumentException("Can't find class for type " + type);
Expand All @@ -278,6 +282,8 @@ private static <T, S> S init(Map<T, Class<?>> map, T type, Object[] initArgs, Cl
throw (MLException) cause;
} else if (cause instanceof IllegalArgumentException) {
throw (IllegalArgumentException) cause;
} else if (cause instanceof JsonParseException) {
throw (JsonParseException) cause;
} else {
log.error("Failed to init instance for type " + type, e);
return null;
Expand Down
3 changes: 3 additions & 0 deletions common/src/main/java/org/opensearch/ml/common/MLIndex.java
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@
import static org.opensearch.ml.common.CommonValue.ML_JOBS_INDEX_MAPPING_PATH;
import static org.opensearch.ml.common.CommonValue.ML_MCP_SESSION_MANAGEMENT_INDEX_MAPPING_PATH;
import static org.opensearch.ml.common.CommonValue.ML_MCP_TOOLS_INDEX_MAPPING_PATH;
import static org.opensearch.ml.common.CommonValue.ML_MEMORY_CONTAINER_INDEX;
import static org.opensearch.ml.common.CommonValue.ML_MEMORY_CONTAINER_INDEX_MAPPING_PATH;
import static org.opensearch.ml.common.CommonValue.ML_MEMORY_MESSAGE_INDEX;
import static org.opensearch.ml.common.CommonValue.ML_MEMORY_MESSAGE_INDEX_MAPPING_PATH;
import static org.opensearch.ml.common.CommonValue.ML_MEMORY_META_INDEX;
Expand All @@ -45,6 +47,7 @@ public enum MLIndex {
AGENT(ML_AGENT_INDEX, false, ML_AGENT_INDEX_MAPPING_PATH),
MEMORY_META(ML_MEMORY_META_INDEX, false, ML_MEMORY_META_INDEX_MAPPING_PATH),
MEMORY_MESSAGE(ML_MEMORY_MESSAGE_INDEX, false, ML_MEMORY_MESSAGE_INDEX_MAPPING_PATH),
MEMORY_CONTAINER(ML_MEMORY_CONTAINER_INDEX, false, ML_MEMORY_CONTAINER_INDEX_MAPPING_PATH),
MCP_SESSION_MANAGEMENT(MCP_SESSION_MANAGEMENT_INDEX, false, ML_MCP_SESSION_MANAGEMENT_INDEX_MAPPING_PATH),
MCP_TOOLS(MCP_TOOLS_INDEX, false, ML_MCP_TOOLS_INDEX_MAPPING_PATH),
JOBS(ML_JOBS_INDEX, false, ML_JOBS_INDEX_MAPPING_PATH);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -965,7 +965,7 @@ Tags getRemoteModelTags(Connector connector) {
* @param url The URL to analyze for service provider identification
* @return The identified service provider name, or "unknown" if not found
*/
String identifyServiceProvider(String url) {
static String identifyServiceProvider(String url) {
for (String provider : MODEL_SERVICE_PROVIDER_KEYWORDS) {
if (url.contains(provider)) {
return provider;
Expand All @@ -975,6 +975,10 @@ String identifyServiceProvider(String url) {
return TAG_VALUE_UNKNOWN;
}

public static String identifyServiceProviderFromUrl(String url) {
return identifyServiceProvider(url);
}

/**
* Identifies the model name from the connector configuration using multiple strategies.
* The method attempts to extract the model name in the following order:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,7 @@ public class MLTask implements ToXContentObject, Writeable {
@Setter
private String error;
private User user; // TODO: support document level access control later
@Setter
private boolean async;
@Setter
private Map<String, Object> remoteJob;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -182,7 +182,7 @@ default void validateConnectorURL(List<String> urlRegexes) {
}
}
if (!hasMatchedUrl) {
throw new IllegalArgumentException("Connector URL is not matching the trusted connector endpoint regex, URL is: " + url);
throw new IllegalArgumentException("Connector URL is not matching the trusted connector endpoint regex");
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,14 @@

import java.io.IOException;
import java.util.HashSet;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Set;

import org.apache.commons.text.StringSubstitutor;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.opensearch.core.common.io.stream.StreamInput;
import org.opensearch.core.common.io.stream.StreamOutput;
import org.opensearch.core.common.io.stream.Writeable;
Expand All @@ -35,6 +39,17 @@ public class ConnectorAction implements ToXContentObject, Writeable {
public static final String REQUEST_BODY_FIELD = "request_body";
public static final String ACTION_PRE_PROCESS_FUNCTION = "pre_process_function";
public static final String ACTION_POST_PROCESS_FUNCTION = "post_process_function";
public static final String OPENAI = "openai";
public static final String COHERE = "cohere";
public static final String BEDROCK = "bedrock";
public static final String SAGEMAKER = "sagemaker";
public static final String SAGEMAKER_PRE_POST_FUNC_TEXT = "default";
public static final List<String> SUPPORTED_REMOTE_SERVERS_FOR_DEFAULT_ACTION_TYPES = List.of(SAGEMAKER, OPENAI, BEDROCK, COHERE);

private static final String INBUILT_FUNC_PREFIX = "connector.";
private static final String PRE_PROCESS_FUNC = "PreProcessFunction";
private static final String POST_PROCESS_FUNC = "PostProcessFunction";
private static final Logger logger = LogManager.getLogger(ConnectorAction.class);

private ActionType actionType;
private String method;
Expand Down Expand Up @@ -185,6 +200,81 @@ public static ConnectorAction parse(XContentParser parser) throws IOException {
.build();
}

/**
* Checks the compatibility of pre and post-process functions with the selected LLM service.
* Each LLM service (eg: Bedrock, OpenAI, SageMaker) has recommended pre and post-process functions
* designed for optimal performance. While it's possible to use functions from other services,
* it's strongly advised to use the corresponding functions for the best results.
* This method logs a warning if non-corresponding functions are detected, but allows the
* configuration to proceed. Users should be aware that using mismatched functions may lead
* to unexpected behavior or reduced performance, though it won't necessarily cause failures.
*
* @param parameters - connector parameters
*/
public void validatePrePostProcessFunctions(Map<String, String> parameters) {
StringSubstitutor substitutor = new StringSubstitutor(parameters, "${parameters.", "}");
String endPoint = substitutor.replace(url);
String remoteServer = getRemoteServerFromURL(endPoint);
if (!remoteServer.isEmpty()) {
validateProcessFunctions(remoteServer, preProcessFunction, PRE_PROCESS_FUNC);
validateProcessFunctions(remoteServer, postProcessFunction, POST_PROCESS_FUNC);
}
}

/**
* To get the remote server name from url
*
* @param url - remote server url
* @return - returns the corresponding remote server name for url, if server is not in the pre-defined list,
* it returns null
*/
public static String getRemoteServerFromURL(String url) {
return SUPPORTED_REMOTE_SERVERS_FOR_DEFAULT_ACTION_TYPES.stream().filter(url::contains).findFirst().orElse("");
}

private void validateProcessFunctions(String remoteServer, String processFunction, String funcNameForWarnText) {
if (isInBuiltProcessFunction(processFunction)) {
switch (remoteServer) {
case OPENAI:
if (!processFunction.contains(OPENAI)) {
logWarningForInvalidProcessFunc(OPENAI, funcNameForWarnText);
}
break;
case COHERE:
if (!processFunction.contains(COHERE)) {
logWarningForInvalidProcessFunc(COHERE, funcNameForWarnText);
}
break;
case BEDROCK:
if (!processFunction.contains(BEDROCK)) {
logWarningForInvalidProcessFunc(BEDROCK, funcNameForWarnText);
}
break;
case SAGEMAKER:
if (!processFunction.contains(SAGEMAKER_PRE_POST_FUNC_TEXT)) {
logWarningForInvalidProcessFunc(SAGEMAKER, funcNameForWarnText);
}
}
}
}

private boolean isInBuiltProcessFunction(String processFunction) {
return (processFunction != null && processFunction.startsWith(INBUILT_FUNC_PREFIX));
}

private void logWarningForInvalidProcessFunc(String remoteServer, String funcNameForWarnText) {
logger
.warn(
"LLM service is "
+ remoteServer
+ ", so "
+ funcNameForWarnText
+ " should be corresponding to "
+ remoteServer
+ " for better results."
);
}

public enum ActionType {
PREDICT,
EXECUTE,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,11 @@ public HttpConnector(
String tenantId
) {
validateProtocol(protocol);
if (actions != null) {
for (ConnectorAction action : actions) {
action.validatePrePostProcessFunctions(parameters);
}
}
this.name = name;
this.description = description;
this.version = version;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -438,7 +438,7 @@ public void validateConnectorURL(List<String> urlRegexes) {
}
}
if (!hasMatchedUrl) {
throw new IllegalArgumentException("Connector URL is not matching the trusted connector endpoint regex, URL is: " + url);
throw new IllegalArgumentException("Connector URL is not matching the trusted connector endpoint regex");
}
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
/*
*
* * Copyright OpenSearch Contributors
* * SPDX-License-Identifier: Apache-2.0
*
* Copyright OpenSearch Contributors
* SPDX-License-Identifier: Apache-2.0
*/

package org.opensearch.ml.common.connector.functions.preprocess;
Expand Down
Loading
Loading