2828import org .elasticsearch .indices .SystemIndexDescriptor ;
2929import org .elasticsearch .inference .InferenceServiceExtension ;
3030import org .elasticsearch .inference .InferenceServiceRegistry ;
31+ import org .elasticsearch .license .XPackLicenseState ;
3132import org .elasticsearch .node .PluginComponentBinding ;
3233import org .elasticsearch .plugins .ActionPlugin ;
3334import org .elasticsearch .plugins .ExtensiblePlugin ;
4445import org .elasticsearch .threadpool .ScalingExecutorBuilder ;
4546import org .elasticsearch .xcontent .ParseField ;
4647import org .elasticsearch .xpack .core .ClientHelper ;
48+ import org .elasticsearch .xpack .core .XPackPlugin ;
4749import org .elasticsearch .xpack .core .action .XPackUsageFeatureAction ;
4850import org .elasticsearch .xpack .core .inference .action .DeleteInferenceEndpointAction ;
4951import org .elasticsearch .xpack .core .inference .action .GetInferenceDiagnosticsAction ;
5355import org .elasticsearch .xpack .core .inference .action .PutInferenceModelAction ;
5456import org .elasticsearch .xpack .core .inference .action .UnifiedCompletionAction ;
5557import org .elasticsearch .xpack .core .inference .action .UpdateInferenceModelAction ;
58+ import org .elasticsearch .xpack .core .ssl .SSLService ;
5659import org .elasticsearch .xpack .inference .action .TransportDeleteInferenceEndpointAction ;
5760import org .elasticsearch .xpack .inference .action .TransportGetInferenceDiagnosticsAction ;
5861import org .elasticsearch .xpack .inference .action .TransportGetInferenceModelAction ;
116119import java .util .Map ;
117120import java .util .function .Predicate ;
118121import java .util .function .Supplier ;
119- import java .util .stream .Collectors ;
120122import java .util .stream .Stream ;
121123
122124import static java .util .Collections .singletonList ;
@@ -150,6 +152,7 @@ public class InferencePlugin extends Plugin implements ActionPlugin, ExtensibleP
150152 private final Settings settings ;
151153 private final SetOnce <HttpRequestSender .Factory > httpFactory = new SetOnce <>();
152154 private final SetOnce <AmazonBedrockRequestSender .Factory > amazonBedrockFactory = new SetOnce <>();
155+ private final SetOnce <HttpRequestSender .Factory > elasicInferenceServiceFactory = new SetOnce <>();
153156 private final SetOnce <ServiceComponents > serviceComponents = new SetOnce <>();
154157 private final SetOnce <ElasticInferenceServiceComponents > elasticInferenceServiceComponents = new SetOnce <>();
155158 private final SetOnce <InferenceServiceRegistry > inferenceServiceRegistry = new SetOnce <>();
@@ -232,31 +235,31 @@ public Collection<?> createComponents(PluginServices services) {
232235 var inferenceServices = new ArrayList <>(inferenceServiceExtensions );
233236 inferenceServices .add (this ::getInferenceServiceFactories );
234237
235- // Set elasticInferenceUrl based on feature flags to support transitioning to the new Elastic Inference Service URL without exposing
236- // internal names like "eis" or "gateway".
237- ElasticInferenceServiceSettings inferenceServiceSettings = new ElasticInferenceServiceSettings (settings );
238-
239- String elasticInferenceUrl = null ;
238+ if (isElasticInferenceServiceEnabled ()) {
239+ // Create a separate instance of HTTPClientManager with its own SSL configuration (`xpack.inference.elastic.http.ssl.*`).
240+ var elasticInferenceServiceHttpClientManager = HttpClientManager .create (
241+ settings ,
242+ services .threadPool (),
243+ services .clusterService (),
244+ throttlerManager ,
245+ getSslService ()
246+ );
240247
241- if (ELASTIC_INFERENCE_SERVICE_FEATURE_FLAG .isEnabled ()) {
242- elasticInferenceUrl = inferenceServiceSettings .getElasticInferenceServiceUrl ();
243- } else if (DEPRECATED_ELASTIC_INFERENCE_SERVICE_FEATURE_FLAG .isEnabled ()) {
244- log .warn (
245- "Deprecated flag {} detected for enabling {}. Please use {}." ,
246- ELASTIC_INFERENCE_SERVICE_IDENTIFIER ,
247- DEPRECATED_ELASTIC_INFERENCE_SERVICE_FEATURE_FLAG ,
248- ELASTIC_INFERENCE_SERVICE_FEATURE_FLAG
248+ var elasticInferenceServiceRequestSenderFactory = new HttpRequestSender .Factory (
249+ serviceComponents .get (),
250+ elasticInferenceServiceHttpClientManager ,
251+ services .clusterService ()
249252 );
250- elasticInferenceUrl = inferenceServiceSettings .getEisGatewayUrl ();
251- }
253+ elasicInferenceServiceFactory .set (elasticInferenceServiceRequestSenderFactory );
252254
253- if (elasticInferenceUrl != null ) {
255+ ElasticInferenceServiceSettings inferenceServiceSettings = new ElasticInferenceServiceSettings (settings );
256+ String elasticInferenceUrl = this .getElasticInferenceServiceUrl (inferenceServiceSettings );
254257 elasticInferenceServiceComponents .set (new ElasticInferenceServiceComponents (elasticInferenceUrl ));
255258
256259 inferenceServices .add (
257260 () -> List .of (
258261 context -> new ElasticInferenceService (
259- httpFactory .get (),
262+ elasicInferenceServiceFactory .get (),
260263 serviceComponents .get (),
261264 elasticInferenceServiceComponents .get ()
262265 )
@@ -379,16 +382,21 @@ public static ExecutorBuilder<?> inferenceUtilityExecutor(Settings settings) {
379382
380383 @ Override
381384 public List <Setting <?>> getSettings () {
382- return Stream .of (
383- HttpSettings .getSettingsDefinitions (),
384- HttpClientManager .getSettingsDefinitions (),
385- ThrottlerManager .getSettingsDefinitions (),
386- RetrySettings .getSettingsDefinitions (),
387- ElasticInferenceServiceSettings .getSettingsDefinitions (),
388- Truncator .getSettingsDefinitions (),
389- RequestExecutorServiceSettings .getSettingsDefinitions (),
390- List .of (SKIP_VALIDATE_AND_START )
391- ).flatMap (Collection ::stream ).collect (Collectors .toList ());
385+ ArrayList <Setting <?>> settings = new ArrayList <>();
386+ settings .addAll (HttpSettings .getSettingsDefinitions ());
387+ settings .addAll (HttpClientManager .getSettingsDefinitions ());
388+ settings .addAll (ThrottlerManager .getSettingsDefinitions ());
389+ settings .addAll (RetrySettings .getSettingsDefinitions ());
390+ settings .addAll (Truncator .getSettingsDefinitions ());
391+ settings .addAll (RequestExecutorServiceSettings .getSettingsDefinitions ());
392+ settings .add (SKIP_VALIDATE_AND_START );
393+
394+ // Register Elastic Inference Service settings definitions if the corresponding feature flag is enabled.
395+ if (isElasticInferenceServiceEnabled ()) {
396+ settings .addAll (ElasticInferenceServiceSettings .getSettingsDefinitions ());
397+ }
398+
399+ return settings ;
392400 }
393401
394402 @ Override
@@ -431,7 +439,10 @@ public List<QuerySpec<?>> getQueries() {
431439 @ Override
432440 public List <RetrieverSpec <?>> getRetrievers () {
433441 return List .of (
434- new RetrieverSpec <>(new ParseField (TextSimilarityRankBuilder .NAME ), TextSimilarityRankRetrieverBuilder ::fromXContent ),
442+ new RetrieverSpec <>(
443+ new ParseField (TextSimilarityRankBuilder .NAME ),
444+ (parser , context ) -> TextSimilarityRankRetrieverBuilder .fromXContent (parser , context , getLicenseState ())
445+ ),
435446 new RetrieverSpec <>(new ParseField (RandomRankBuilder .NAME ), RandomRankRetrieverBuilder ::fromXContent )
436447 );
437448 }
@@ -440,4 +451,36 @@ public List<RetrieverSpec<?>> getRetrievers() {
440451 public Map <String , Highlighter > getHighlighters () {
441452 return Map .of (SemanticTextHighlighter .NAME , new SemanticTextHighlighter ());
442453 }
454+
455+ // Get Elastic Inference service URL based on feature flags to support transitioning
456+ // to the new Elastic Inference Service URL.
457+ private String getElasticInferenceServiceUrl (ElasticInferenceServiceSettings settings ) {
458+ String elasticInferenceUrl = null ;
459+
460+ if (ELASTIC_INFERENCE_SERVICE_FEATURE_FLAG .isEnabled ()) {
461+ elasticInferenceUrl = settings .getElasticInferenceServiceUrl ();
462+ } else if (DEPRECATED_ELASTIC_INFERENCE_SERVICE_FEATURE_FLAG .isEnabled ()) {
463+ log .warn (
464+ "Deprecated flag {} detected for enabling {}. Please use {}." ,
465+ ELASTIC_INFERENCE_SERVICE_IDENTIFIER ,
466+ DEPRECATED_ELASTIC_INFERENCE_SERVICE_FEATURE_FLAG ,
467+ ELASTIC_INFERENCE_SERVICE_FEATURE_FLAG
468+ );
469+ elasticInferenceUrl = settings .getEisGatewayUrl ();
470+ }
471+
472+ return elasticInferenceUrl ;
473+ }
474+
475+ protected Boolean isElasticInferenceServiceEnabled () {
476+ return (ELASTIC_INFERENCE_SERVICE_FEATURE_FLAG .isEnabled () || DEPRECATED_ELASTIC_INFERENCE_SERVICE_FEATURE_FLAG .isEnabled ());
477+ }
478+
479+ protected SSLService getSslService () {
480+ return XPackPlugin .getSharedSslService ();
481+ }
482+
483+ protected XPackLicenseState getLicenseState () {
484+ return XPackPlugin .getSharedLicenseState ();
485+ }
443486}
0 commit comments