diff --git a/Gemfile b/Gemfile
index c61828291..a2263210d 100644
--- a/Gemfile
+++ b/Gemfile
@@ -38,5 +38,5 @@ end
 group :development, :test do
   gem 'debug' unless defined?(JRUBY_VERSION)
   gem 'rspec'
-  gem 'rubocop', '>= 1.51' unless defined?(JRUBY_VERSION) && Gem::Version.new(JRUBY_VERSION) <= Gem::Version.new('9.4')
+  gem 'rubocop', '>= 1.51' unless defined?(JRUBY_VERSION)
 end
diff --git a/elasticsearch-api/lib/elasticsearch/api/actions/indices/put_template.rb b/elasticsearch-api/lib/elasticsearch/api/actions/indices/put_template.rb
index a774964fb..e4f7e9e69 100644
--- a/elasticsearch-api/lib/elasticsearch/api/actions/indices/put_template.rb
+++ b/elasticsearch-api/lib/elasticsearch/api/actions/indices/put_template.rb
@@ -27,6 +27,7 @@ module Actions
         # @option arguments [String] :name The name of the template
         # @option arguments [Number] :order The order for this template when merging multiple matching ones (higher numbers are merged later, overriding the lower numbers)
         # @option arguments [Boolean] :create Whether the index template should only be added if new or can also replace an existing one
+        # @option arguments [String] :cause User defined reason for creating/updating the index template
         # @option arguments [Time] :master_timeout Specify timeout for connection to master
         # @option arguments [Hash] :headers Custom HTTP headers
         # @option arguments [Hash] :body The template definition (*Required*)
diff --git a/elasticsearch-api/lib/elasticsearch/api/actions/inference/put_alibabacloud.rb b/elasticsearch-api/lib/elasticsearch/api/actions/inference/put_alibabacloud.rb
new file mode 100644
index 000000000..e12a3cd54
--- /dev/null
+++ b/elasticsearch-api/lib/elasticsearch/api/actions/inference/put_alibabacloud.rb
@@ -0,0 +1,69 @@
+# Licensed to Elasticsearch B.V. under one or more contributor
+# license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright
+# ownership. Elasticsearch B.V. licenses this file to you under
+# the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+# Auto generated from build hash f284cc16f4d4b4289bc679aa1529bb504190fe80
+# @see https://github.com/elastic/elasticsearch/tree/main/rest-api-spec
+#
+module Elasticsearch
+  module API
+    module Inference
+      module Actions
+        # Configure an AlibabaCloud AI Search inference endpoint
+        #
+        # @option arguments [String] :task_type The task type
+        # @option arguments [String] :alibabacloud_inference_id The inference Id
+        # @option arguments [Hash] :headers Custom HTTP headers
+        # @option arguments [Hash] :body The inference endpoint's task and service settings
+        #
+        # @see https://www.elastic.co/guide/en/elasticsearch/reference/8.17/infer-service-alibabacloud-ai-search.html
+        #
+        def put_alibabacloud(arguments = {})
+          request_opts = { endpoint: arguments[:endpoint] || 'inference.put_alibabacloud' }
+
+          defined_params = %i[task_type alibabacloud_inference_id].each_with_object({}) do |variable, set_variables|
+            set_variables[variable] = arguments[variable] if arguments.key?(variable)
+          end
+          request_opts[:defined_params] = defined_params unless defined_params.empty?
+
+          raise ArgumentError, "Required argument 'task_type' missing" unless arguments[:task_type]
+
+          unless arguments[:alibabacloud_inference_id]
+            raise ArgumentError,
+                  "Required argument 'alibabacloud_inference_id' missing"
+          end
+
+          arguments = arguments.clone
+          headers = arguments.delete(:headers) || {}
+
+          body = arguments.delete(:body)
+
+          _task_type = arguments.delete(:task_type)
+
+          _alibabacloud_inference_id = arguments.delete(:alibabacloud_inference_id)
+
+          method = Elasticsearch::API::HTTP_PUT
+          path   = "_inference/#{Utils.__listify(_task_type)}/#{Utils.__listify(_alibabacloud_inference_id)}"
+          params = {}
+
+          Elasticsearch::API::Response.new(
+            perform_request(method, path, params, body, headers, request_opts)
+          )
+        end
+      end
+    end
+  end
+end
diff --git a/elasticsearch-api/lib/elasticsearch/api/actions/inference/put_amazonbedrock.rb b/elasticsearch-api/lib/elasticsearch/api/actions/inference/put_amazonbedrock.rb
new file mode 100644
index 000000000..1578791ef
--- /dev/null
+++ b/elasticsearch-api/lib/elasticsearch/api/actions/inference/put_amazonbedrock.rb
@@ -0,0 +1,69 @@
+# Licensed to Elasticsearch B.V. under one or more contributor
+# license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright
+# ownership. Elasticsearch B.V. licenses this file to you under
+# the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+# Auto generated from build hash f284cc16f4d4b4289bc679aa1529bb504190fe80
+# @see https://github.com/elastic/elasticsearch/tree/main/rest-api-spec
+#
+module Elasticsearch
+  module API
+    module Inference
+      module Actions
+        # Configure an Amazon Bedrock inference endpoint
+        #
+        # @option arguments [String] :task_type The task type
+        # @option arguments [String] :amazonbedrock_inference_id The inference Id
+        # @option arguments [Hash] :headers Custom HTTP headers
+        # @option arguments [Hash] :body The inference endpoint's task and service settings
+        #
+        # @see https://www.elastic.co/guide/en/elasticsearch/reference/8.17/infer-service-amazon-bedrock.html
+        #
+        def put_amazonbedrock(arguments = {})
+          request_opts = { endpoint: arguments[:endpoint] || 'inference.put_amazonbedrock' }
+
+          defined_params = %i[task_type amazonbedrock_inference_id].each_with_object({}) do |variable, set_variables|
+            set_variables[variable] = arguments[variable] if arguments.key?(variable)
+          end
+          request_opts[:defined_params] = defined_params unless defined_params.empty?
+
+          raise ArgumentError, "Required argument 'task_type' missing" unless arguments[:task_type]
+
+          unless arguments[:amazonbedrock_inference_id]
+            raise ArgumentError,
+                  "Required argument 'amazonbedrock_inference_id' missing"
+          end
+
+          arguments = arguments.clone
+          headers = arguments.delete(:headers) || {}
+
+          body = arguments.delete(:body)
+
+          _task_type = arguments.delete(:task_type)
+
+          _amazonbedrock_inference_id = arguments.delete(:amazonbedrock_inference_id)
+
+          method = Elasticsearch::API::HTTP_PUT
+          path   = "_inference/#{Utils.__listify(_task_type)}/#{Utils.__listify(_amazonbedrock_inference_id)}"
+          params = {}
+
+          Elasticsearch::API::Response.new(
+            perform_request(method, path, params, body, headers, request_opts)
+          )
+        end
+      end
+    end
+  end
+end
diff --git a/elasticsearch-api/lib/elasticsearch/api/actions/inference/put_anthropic.rb b/elasticsearch-api/lib/elasticsearch/api/actions/inference/put_anthropic.rb
new file mode 100644
index 000000000..47b003716
--- /dev/null
+++ b/elasticsearch-api/lib/elasticsearch/api/actions/inference/put_anthropic.rb
@@ -0,0 +1,69 @@
+# Licensed to Elasticsearch B.V. under one or more contributor
+# license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright
+# ownership. Elasticsearch B.V. licenses this file to you under
+# the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+# Auto generated from build hash f284cc16f4d4b4289bc679aa1529bb504190fe80
+# @see https://github.com/elastic/elasticsearch/tree/main/rest-api-spec
+#
+module Elasticsearch
+  module API
+    module Inference
+      module Actions
+        # Configure an Anthropic inference endpoint
+        #
+        # @option arguments [String] :task_type The task type
+        # @option arguments [String] :anthropic_inference_id The inference Id
+        # @option arguments [Hash] :headers Custom HTTP headers
+        # @option arguments [Hash] :body The inference endpoint's task and service settings
+        #
+        # @see https://www.elastic.co/guide/en/elasticsearch/reference/8.17/infer-service-anthropic.html
+        #
+        def put_anthropic(arguments = {})
+          request_opts = { endpoint: arguments[:endpoint] || 'inference.put_anthropic' }
+
+          defined_params = %i[task_type anthropic_inference_id].each_with_object({}) do |variable, set_variables|
+            set_variables[variable] = arguments[variable] if arguments.key?(variable)
+          end
+          request_opts[:defined_params] = defined_params unless defined_params.empty?
+
+          raise ArgumentError, "Required argument 'task_type' missing" unless arguments[:task_type]
+
+          unless arguments[:anthropic_inference_id]
+            raise ArgumentError,
+                  "Required argument 'anthropic_inference_id' missing"
+          end
+
+          arguments = arguments.clone
+          headers = arguments.delete(:headers) || {}
+
+          body = arguments.delete(:body)
+
+          _task_type = arguments.delete(:task_type)
+
+          _anthropic_inference_id = arguments.delete(:anthropic_inference_id)
+
+          method = Elasticsearch::API::HTTP_PUT
+          path   = "_inference/#{Utils.__listify(_task_type)}/#{Utils.__listify(_anthropic_inference_id)}"
+          params = {}
+
+          Elasticsearch::API::Response.new(
+            perform_request(method, path, params, body, headers, request_opts)
+          )
+        end
+      end
+    end
+  end
+end
diff --git a/elasticsearch-api/lib/elasticsearch/api/actions/inference/put_azureaistudio.rb b/elasticsearch-api/lib/elasticsearch/api/actions/inference/put_azureaistudio.rb
new file mode 100644
index 000000000..f934e7a18
--- /dev/null
+++ b/elasticsearch-api/lib/elasticsearch/api/actions/inference/put_azureaistudio.rb
@@ -0,0 +1,69 @@
+# Licensed to Elasticsearch B.V. under one or more contributor
+# license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright
+# ownership. Elasticsearch B.V. licenses this file to you under
+# the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+# Auto generated from build hash f284cc16f4d4b4289bc679aa1529bb504190fe80
+# @see https://github.com/elastic/elasticsearch/tree/main/rest-api-spec
+#
+module Elasticsearch
+  module API
+    module Inference
+      module Actions
+        # Configure an Azure AI Studio inference endpoint
+        #
+        # @option arguments [String] :task_type The task type
+        # @option arguments [String] :azureaistudio_inference_id The inference Id
+        # @option arguments [Hash] :headers Custom HTTP headers
+        # @option arguments [Hash] :body The inference endpoint's task and service settings
+        #
+        # @see https://www.elastic.co/guide/en/elasticsearch/reference/8.17/infer-service-azure-ai-studio.html
+        #
+        def put_azureaistudio(arguments = {})
+          request_opts = { endpoint: arguments[:endpoint] || 'inference.put_azureaistudio' }
+
+          defined_params = %i[task_type azureaistudio_inference_id].each_with_object({}) do |variable, set_variables|
+            set_variables[variable] = arguments[variable] if arguments.key?(variable)
+          end
+          request_opts[:defined_params] = defined_params unless defined_params.empty?
+
+          raise ArgumentError, "Required argument 'task_type' missing" unless arguments[:task_type]
+
+          unless arguments[:azureaistudio_inference_id]
+            raise ArgumentError,
+                  "Required argument 'azureaistudio_inference_id' missing"
+          end
+
+          arguments = arguments.clone
+          headers = arguments.delete(:headers) || {}
+
+          body = arguments.delete(:body)
+
+          _task_type = arguments.delete(:task_type)
+
+          _azureaistudio_inference_id = arguments.delete(:azureaistudio_inference_id)
+
+          method = Elasticsearch::API::HTTP_PUT
+          path   = "_inference/#{Utils.__listify(_task_type)}/#{Utils.__listify(_azureaistudio_inference_id)}"
+          params = {}
+
+          Elasticsearch::API::Response.new(
+            perform_request(method, path, params, body, headers, request_opts)
+          )
+        end
+      end
+    end
+  end
+end
diff --git a/elasticsearch-api/lib/elasticsearch/api/actions/inference/put_azureopenai.rb b/elasticsearch-api/lib/elasticsearch/api/actions/inference/put_azureopenai.rb
new file mode 100644
index 000000000..c3b8f640d
--- /dev/null
+++ b/elasticsearch-api/lib/elasticsearch/api/actions/inference/put_azureopenai.rb
@@ -0,0 +1,69 @@
+# Licensed to Elasticsearch B.V. under one or more contributor
+# license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright
+# ownership. Elasticsearch B.V. licenses this file to you under
+# the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+# Auto generated from build hash f284cc16f4d4b4289bc679aa1529bb504190fe80
+# @see https://github.com/elastic/elasticsearch/tree/main/rest-api-spec
+#
+module Elasticsearch
+  module API
+    module Inference
+      module Actions
+        # Configure an Azure OpenAI inference endpoint
+        #
+        # @option arguments [String] :task_type The task type
+        # @option arguments [String] :azureopenai_inference_id The inference Id
+        # @option arguments [Hash] :headers Custom HTTP headers
+        # @option arguments [Hash] :body The inference endpoint's task and service settings
+        #
+        # @see https://www.elastic.co/guide/en/elasticsearch/reference/8.17/infer-service-azure-openai.html
+        #
+        def put_azureopenai(arguments = {})
+          request_opts = { endpoint: arguments[:endpoint] || 'inference.put_azureopenai' }
+
+          defined_params = %i[task_type azureopenai_inference_id].each_with_object({}) do |variable, set_variables|
+            set_variables[variable] = arguments[variable] if arguments.key?(variable)
+          end
+          request_opts[:defined_params] = defined_params unless defined_params.empty?
+
+          raise ArgumentError, "Required argument 'task_type' missing" unless arguments[:task_type]
+
+          unless arguments[:azureopenai_inference_id]
+            raise ArgumentError,
+                  "Required argument 'azureopenai_inference_id' missing"
+          end
+
+          arguments = arguments.clone
+          headers = arguments.delete(:headers) || {}
+
+          body = arguments.delete(:body)
+
+          _task_type = arguments.delete(:task_type)
+
+          _azureopenai_inference_id = arguments.delete(:azureopenai_inference_id)
+
+          method = Elasticsearch::API::HTTP_PUT
+          path   = "_inference/#{Utils.__listify(_task_type)}/#{Utils.__listify(_azureopenai_inference_id)}"
+          params = {}
+
+          Elasticsearch::API::Response.new(
+            perform_request(method, path, params, body, headers, request_opts)
+          )
+        end
+      end
+    end
+  end
+end
diff --git a/elasticsearch-api/lib/elasticsearch/api/actions/inference/put_cohere.rb b/elasticsearch-api/lib/elasticsearch/api/actions/inference/put_cohere.rb
new file mode 100644
index 000000000..ad627ea1d
--- /dev/null
+++ b/elasticsearch-api/lib/elasticsearch/api/actions/inference/put_cohere.rb
@@ -0,0 +1,65 @@
+# Licensed to Elasticsearch B.V. under one or more contributor
+# license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright
+# ownership. Elasticsearch B.V. licenses this file to you under
+# the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+# Auto generated from build hash f284cc16f4d4b4289bc679aa1529bb504190fe80
+# @see https://github.com/elastic/elasticsearch/tree/main/rest-api-spec
+#
+module Elasticsearch
+  module API
+    module Inference
+      module Actions
+        # Configure a Cohere inference endpoint
+        #
+        # @option arguments [String] :task_type The task type
+        # @option arguments [String] :cohere_inference_id The inference Id
+        # @option arguments [Hash] :headers Custom HTTP headers
+        # @option arguments [Hash] :body The inference endpoint's task and service settings
+        #
+        # @see https://www.elastic.co/guide/en/elasticsearch/reference/8.17/infer-service-cohere.html
+        #
+        def put_cohere(arguments = {})
+          request_opts = { endpoint: arguments[:endpoint] || 'inference.put_cohere' }
+
+          defined_params = %i[task_type cohere_inference_id].each_with_object({}) do |variable, set_variables|
+            set_variables[variable] = arguments[variable] if arguments.key?(variable)
+          end
+          request_opts[:defined_params] = defined_params unless defined_params.empty?
+
+          raise ArgumentError, "Required argument 'task_type' missing" unless arguments[:task_type]
+          raise ArgumentError, "Required argument 'cohere_inference_id' missing" unless arguments[:cohere_inference_id]
+
+          arguments = arguments.clone
+          headers = arguments.delete(:headers) || {}
+
+          body = arguments.delete(:body)
+
+          _task_type = arguments.delete(:task_type)
+
+          _cohere_inference_id = arguments.delete(:cohere_inference_id)
+
+          method = Elasticsearch::API::HTTP_PUT
+          path   = "_inference/#{Utils.__listify(_task_type)}/#{Utils.__listify(_cohere_inference_id)}"
+          params = {}
+
+          Elasticsearch::API::Response.new(
+            perform_request(method, path, params, body, headers, request_opts)
+          )
+        end
+      end
+    end
+  end
+end
diff --git a/elasticsearch-api/lib/elasticsearch/api/actions/inference/put_eis.rb b/elasticsearch-api/lib/elasticsearch/api/actions/inference/put_eis.rb
new file mode 100644
index 000000000..e423437f7
--- /dev/null
+++ b/elasticsearch-api/lib/elasticsearch/api/actions/inference/put_eis.rb
@@ -0,0 +1,65 @@
+# Licensed to Elasticsearch B.V. under one or more contributor
+# license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright
+# ownership. Elasticsearch B.V. licenses this file to you under
+# the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+# Auto generated from build hash f284cc16f4d4b4289bc679aa1529bb504190fe80
+# @see https://github.com/elastic/elasticsearch/tree/main/rest-api-spec
+#
+module Elasticsearch
+  module API
+    module Inference
+      module Actions
+        # Configure an inference endpoint that uses the Elastic Inference Service (EIS)
+        #
+        # @option arguments [String] :task_type The task type
+        # @option arguments [String] :eis_inference_id The inference ID
+        # @option arguments [Hash] :headers Custom HTTP headers
+        # @option arguments [Hash] :body The inference endpoint's task and service settings
+        #
+        # @see https://www.elastic.co/guide/en/elasticsearch/reference/8.17/infer-service-elastic.html
+        #
+        def put_eis(arguments = {})
+          request_opts = { endpoint: arguments[:endpoint] || 'inference.put_eis' }
+
+          defined_params = %i[task_type eis_inference_id].each_with_object({}) do |variable, set_variables|
+            set_variables[variable] = arguments[variable] if arguments.key?(variable)
+          end
+          request_opts[:defined_params] = defined_params unless defined_params.empty?
+
+          raise ArgumentError, "Required argument 'task_type' missing" unless arguments[:task_type]
+          raise ArgumentError, "Required argument 'eis_inference_id' missing" unless arguments[:eis_inference_id]
+
+          arguments = arguments.clone
+          headers = arguments.delete(:headers) || {}
+
+          body = arguments.delete(:body)
+
+          _task_type = arguments.delete(:task_type)
+
+          _eis_inference_id = arguments.delete(:eis_inference_id)
+
+          method = Elasticsearch::API::HTTP_PUT
+          path   = "_inference/#{Utils.__listify(_task_type)}/#{Utils.__listify(_eis_inference_id)}"
+          params = {}
+
+          Elasticsearch::API::Response.new(
+            perform_request(method, path, params, body, headers, request_opts)
+          )
+        end
+      end
+    end
+  end
+end
diff --git a/elasticsearch-api/lib/elasticsearch/api/actions/inference/put_elasticsearch.rb b/elasticsearch-api/lib/elasticsearch/api/actions/inference/put_elasticsearch.rb
new file mode 100644
index 000000000..98adcd2ab
--- /dev/null
+++ b/elasticsearch-api/lib/elasticsearch/api/actions/inference/put_elasticsearch.rb
@@ -0,0 +1,69 @@
+# Licensed to Elasticsearch B.V. under one or more contributor
+# license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright
+# ownership. Elasticsearch B.V. licenses this file to you under
+# the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+# Auto generated from build hash f284cc16f4d4b4289bc679aa1529bb504190fe80
+# @see https://github.com/elastic/elasticsearch/tree/main/rest-api-spec
+#
+module Elasticsearch
+  module API
+    module Inference
+      module Actions
+        # Configure an Elasticsearch inference endpoint
+        #
+        # @option arguments [String] :task_type The task type
+        # @option arguments [String] :elasticsearch_inference_id The inference Id
+        # @option arguments [Hash] :headers Custom HTTP headers
+        # @option arguments [Hash] :body The inference endpoint's task and service settings
+        #
+        # @see https://www.elastic.co/guide/en/elasticsearch/reference/8.17/infer-service-elasticsearch.html
+        #
+        def put_elasticsearch(arguments = {})
+          request_opts = { endpoint: arguments[:endpoint] || 'inference.put_elasticsearch' }
+
+          defined_params = %i[task_type elasticsearch_inference_id].each_with_object({}) do |variable, set_variables|
+            set_variables[variable] = arguments[variable] if arguments.key?(variable)
+          end
+          request_opts[:defined_params] = defined_params unless defined_params.empty?
+
+          raise ArgumentError, "Required argument 'task_type' missing" unless arguments[:task_type]
+
+          unless arguments[:elasticsearch_inference_id]
+            raise ArgumentError,
+                  "Required argument 'elasticsearch_inference_id' missing"
+          end
+
+          arguments = arguments.clone
+          headers = arguments.delete(:headers) || {}
+
+          body = arguments.delete(:body)
+
+          _task_type = arguments.delete(:task_type)
+
+          _elasticsearch_inference_id = arguments.delete(:elasticsearch_inference_id)
+
+          method = Elasticsearch::API::HTTP_PUT
+          path   = "_inference/#{Utils.__listify(_task_type)}/#{Utils.__listify(_elasticsearch_inference_id)}"
+          params = {}
+
+          Elasticsearch::API::Response.new(
+            perform_request(method, path, params, body, headers, request_opts)
+          )
+        end
+      end
+    end
+  end
+end
diff --git a/elasticsearch-api/lib/elasticsearch/api/actions/inference/put_elser.rb b/elasticsearch-api/lib/elasticsearch/api/actions/inference/put_elser.rb
new file mode 100644
index 000000000..d951ba303
--- /dev/null
+++ b/elasticsearch-api/lib/elasticsearch/api/actions/inference/put_elser.rb
@@ -0,0 +1,65 @@
+# Licensed to Elasticsearch B.V. under one or more contributor
+# license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright
+# ownership. Elasticsearch B.V. licenses this file to you under
+# the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+# Auto generated from build hash f284cc16f4d4b4289bc679aa1529bb504190fe80
+# @see https://github.com/elastic/elasticsearch/tree/main/rest-api-spec
+#
+module Elasticsearch
+  module API
+    module Inference
+      module Actions
+        # Configure an ELSER inference endpoint
+        #
+        # @option arguments [String] :task_type The task type
+        # @option arguments [String] :elser_inference_id The inference Id
+        # @option arguments [Hash] :headers Custom HTTP headers
+        # @option arguments [Hash] :body The inference endpoint's task and service settings
+        #
+        # @see https://www.elastic.co/guide/en/elasticsearch/reference/8.17/infer-service-elser.html
+        #
+        def put_elser(arguments = {})
+          request_opts = { endpoint: arguments[:endpoint] || 'inference.put_elser' }
+
+          defined_params = %i[task_type elser_inference_id].each_with_object({}) do |variable, set_variables|
+            set_variables[variable] = arguments[variable] if arguments.key?(variable)
+          end
+          request_opts[:defined_params] = defined_params unless defined_params.empty?
+
+          raise ArgumentError, "Required argument 'task_type' missing" unless arguments[:task_type]
+          raise ArgumentError, "Required argument 'elser_inference_id' missing" unless arguments[:elser_inference_id]
+
+          arguments = arguments.clone
+          headers = arguments.delete(:headers) || {}
+
+          body = arguments.delete(:body)
+
+          _task_type = arguments.delete(:task_type)
+
+          _elser_inference_id = arguments.delete(:elser_inference_id)
+
+          method = Elasticsearch::API::HTTP_PUT
+          path   = "_inference/#{Utils.__listify(_task_type)}/#{Utils.__listify(_elser_inference_id)}"
+          params = {}
+
+          Elasticsearch::API::Response.new(
+            perform_request(method, path, params, body, headers, request_opts)
+          )
+        end
+      end
+    end
+  end
+end
diff --git a/elasticsearch-api/lib/elasticsearch/api/actions/inference/put_googleaistudio.rb b/elasticsearch-api/lib/elasticsearch/api/actions/inference/put_googleaistudio.rb
new file mode 100644
index 000000000..c13ce96f0
--- /dev/null
+++ b/elasticsearch-api/lib/elasticsearch/api/actions/inference/put_googleaistudio.rb
@@ -0,0 +1,69 @@
+# Licensed to Elasticsearch B.V. under one or more contributor
+# license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright
+# ownership. Elasticsearch B.V. licenses this file to you under
+# the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+# Auto generated from build hash f284cc16f4d4b4289bc679aa1529bb504190fe80
+# @see https://github.com/elastic/elasticsearch/tree/main/rest-api-spec
+#
+module Elasticsearch
+  module API
+    module Inference
+      module Actions
+        # Configure a Google AI Studio inference endpoint
+        #
+        # @option arguments [String] :task_type The task type
+        # @option arguments [String] :googleaistudio_inference_id The inference Id
+        # @option arguments [Hash] :headers Custom HTTP headers
+        # @option arguments [Hash] :body The inference endpoint's task and service settings
+        #
+        # @see https://www.elastic.co/guide/en/elasticsearch/reference/8.17/infer-service-google-ai-studio.html
+        #
+        def put_googleaistudio(arguments = {})
+          request_opts = { endpoint: arguments[:endpoint] || 'inference.put_googleaistudio' }
+
+          defined_params = %i[task_type googleaistudio_inference_id].each_with_object({}) do |variable, set_variables|
+            set_variables[variable] = arguments[variable] if arguments.key?(variable)
+          end
+          request_opts[:defined_params] = defined_params unless defined_params.empty?
+
+          raise ArgumentError, "Required argument 'task_type' missing" unless arguments[:task_type]
+
+          unless arguments[:googleaistudio_inference_id]
+            raise ArgumentError,
+                  "Required argument 'googleaistudio_inference_id' missing"
+          end
+
+          arguments = arguments.clone
+          headers = arguments.delete(:headers) || {}
+
+          body = arguments.delete(:body)
+
+          _task_type = arguments.delete(:task_type)
+
+          _googleaistudio_inference_id = arguments.delete(:googleaistudio_inference_id)
+
+          method = Elasticsearch::API::HTTP_PUT
+          path   = "_inference/#{Utils.__listify(_task_type)}/#{Utils.__listify(_googleaistudio_inference_id)}"
+          params = {}
+
+          Elasticsearch::API::Response.new(
+            perform_request(method, path, params, body, headers, request_opts)
+          )
+        end
+      end
+    end
+  end
+end
diff --git a/elasticsearch-api/lib/elasticsearch/api/actions/inference/put_googlevertexai.rb b/elasticsearch-api/lib/elasticsearch/api/actions/inference/put_googlevertexai.rb
new file mode 100644
index 000000000..d9e83d1be
--- /dev/null
+++ b/elasticsearch-api/lib/elasticsearch/api/actions/inference/put_googlevertexai.rb
@@ -0,0 +1,69 @@
+# Licensed to Elasticsearch B.V. under one or more contributor
+# license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright
+# ownership. Elasticsearch B.V. licenses this file to you under
+# the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+# Auto generated from build hash f284cc16f4d4b4289bc679aa1529bb504190fe80
+# @see https://github.com/elastic/elasticsearch/tree/main/rest-api-spec
+#
+module Elasticsearch
+  module API
+    module Inference
+      module Actions
+        # Configure a Google Vertex AI inference endpoint
+        #
+        # @option arguments [String] :task_type The task type
+        # @option arguments [String] :googlevertexai_inference_id The inference Id
+        # @option arguments [Hash] :headers Custom HTTP headers
+        # @option arguments [Hash] :body The inference endpoint's task and service settings
+        #
+        # @see https://www.elastic.co/guide/en/elasticsearch/reference/8.17/infer-service-google-vertex-ai.html
+        #
+        def put_googlevertexai(arguments = {})
+          request_opts = { endpoint: arguments[:endpoint] || 'inference.put_googlevertexai' }
+
+          defined_params = %i[task_type googlevertexai_inference_id].each_with_object({}) do |variable, set_variables|
+            set_variables[variable] = arguments[variable] if arguments.key?(variable)
+          end
+          request_opts[:defined_params] = defined_params unless defined_params.empty?
+
+          raise ArgumentError, "Required argument 'task_type' missing" unless arguments[:task_type]
+
+          unless arguments[:googlevertexai_inference_id]
+            raise ArgumentError,
+                  "Required argument 'googlevertexai_inference_id' missing"
+          end
+
+          arguments = arguments.clone
+          headers = arguments.delete(:headers) || {}
+
+          body = arguments.delete(:body)
+
+          _task_type = arguments.delete(:task_type)
+
+          _googlevertexai_inference_id = arguments.delete(:googlevertexai_inference_id)
+
+          method = Elasticsearch::API::HTTP_PUT
+          path   = "_inference/#{Utils.__listify(_task_type)}/#{Utils.__listify(_googlevertexai_inference_id)}"
+          params = {}
+
+          Elasticsearch::API::Response.new(
+            perform_request(method, path, params, body, headers, request_opts)
+          )
+        end
+      end
+    end
+  end
+end
diff --git a/elasticsearch-api/lib/elasticsearch/api/actions/inference/put_hugging_face.rb b/elasticsearch-api/lib/elasticsearch/api/actions/inference/put_hugging_face.rb
new file mode 100644
index 000000000..55f762836
--- /dev/null
+++ b/elasticsearch-api/lib/elasticsearch/api/actions/inference/put_hugging_face.rb
@@ -0,0 +1,69 @@
+# Licensed to Elasticsearch B.V. under one or more contributor
+# license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright
+# ownership. Elasticsearch B.V. licenses this file to you under
+# the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+# Auto generated from build hash f284cc16f4d4b4289bc679aa1529bb504190fe80
+# @see https://github.com/elastic/elasticsearch/tree/main/rest-api-spec
+#
+module Elasticsearch
+  module API
+    module Inference
+      module Actions
+        # Configure a HuggingFace inference endpoint
+        #
+        # @option arguments [String] :task_type The task type
+        # @option arguments [String] :huggingface_inference_id The inference Id
+        # @option arguments [Hash] :headers Custom HTTP headers
+        # @option arguments [Hash] :body The inference endpoint's task and service settings
+        #
+        # @see https://www.elastic.co/guide/en/elasticsearch/reference/8.17/infer-service-hugging-face.html
+        #
+        def put_hugging_face(arguments = {})
+          request_opts = { endpoint: arguments[:endpoint] || 'inference.put_hugging_face' }
+
+          defined_params = %i[task_type huggingface_inference_id].each_with_object({}) do |variable, set_variables|
+            set_variables[variable] = arguments[variable] if arguments.key?(variable)
+          end
+          request_opts[:defined_params] = defined_params unless defined_params.empty?
+
+          raise ArgumentError, "Required argument 'task_type' missing" unless arguments[:task_type]
+
+          unless arguments[:huggingface_inference_id]
+            raise ArgumentError,
+                  "Required argument 'huggingface_inference_id' missing"
+          end
+
+          arguments = arguments.clone
+          headers = arguments.delete(:headers) || {}
+
+          body = arguments.delete(:body)
+
+          _task_type = arguments.delete(:task_type)
+
+          _huggingface_inference_id = arguments.delete(:huggingface_inference_id)
+
+          method = Elasticsearch::API::HTTP_PUT
+          path   = "_inference/#{Utils.__listify(_task_type)}/#{Utils.__listify(_huggingface_inference_id)}"
+          params = {}
+
+          Elasticsearch::API::Response.new(
+            perform_request(method, path, params, body, headers, request_opts)
+          )
+        end
+      end
+    end
+  end
+end
diff --git a/elasticsearch-api/lib/elasticsearch/api/actions/inference/put_jinaai.rb b/elasticsearch-api/lib/elasticsearch/api/actions/inference/put_jinaai.rb
new file mode 100644
index 000000000..5f4a52131
--- /dev/null
+++ b/elasticsearch-api/lib/elasticsearch/api/actions/inference/put_jinaai.rb
@@ -0,0 +1,65 @@
+# Licensed to Elasticsearch B.V. under one or more contributor
+# license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright
+# ownership. Elasticsearch B.V. licenses this file to you under
+# the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+# Auto generated from build hash f284cc16f4d4b4289bc679aa1529bb504190fe80
+# @see https://github.com/elastic/elasticsearch/tree/main/rest-api-spec
+#
+module Elasticsearch
+  module API
+    module Inference
+      module Actions
+        # Configure a JinaAI inference endpoint
+        #
+        # @option arguments [String] :task_type The task type
+        # @option arguments [String] :jinaai_inference_id The inference Id
+        # @option arguments [Hash] :headers Custom HTTP headers
+        # @option arguments [Hash] :body The inference endpoint's task and service settings
+        #
+        # @see https://www.elastic.co/guide/en/elasticsearch/reference/8.17/infer-service-jinaai.html
+        #
+        def put_jinaai(arguments = {})
+          request_opts = { endpoint: arguments[:endpoint] || 'inference.put_jinaai' }
+
+          defined_params = %i[task_type jinaai_inference_id].each_with_object({}) do |variable, set_variables|
+            set_variables[variable] = arguments[variable] if arguments.key?(variable)
+          end
+          request_opts[:defined_params] = defined_params unless defined_params.empty?
+
+          raise ArgumentError, "Required argument 'task_type' missing" unless arguments[:task_type]
+          raise ArgumentError, "Required argument 'jinaai_inference_id' missing" unless arguments[:jinaai_inference_id]
+
+          arguments = arguments.clone
+          headers = arguments.delete(:headers) || {}
+
+          body = arguments.delete(:body)
+
+          _task_type = arguments.delete(:task_type)
+
+          _jinaai_inference_id = arguments.delete(:jinaai_inference_id)
+
+          method = Elasticsearch::API::HTTP_PUT
+          path   = "_inference/#{Utils.__listify(_task_type)}/#{Utils.__listify(_jinaai_inference_id)}"
+          params = {}
+
+          Elasticsearch::API::Response.new(
+            perform_request(method, path, params, body, headers, request_opts)
+          )
+        end
+      end
+    end
+  end
+end
diff --git a/elasticsearch-api/lib/elasticsearch/api/actions/inference/put_mistral.rb b/elasticsearch-api/lib/elasticsearch/api/actions/inference/put_mistral.rb
new file mode 100644
index 000000000..4073ffc48
--- /dev/null
+++ b/elasticsearch-api/lib/elasticsearch/api/actions/inference/put_mistral.rb
@@ -0,0 +1,69 @@
+# Licensed to Elasticsearch B.V. under one or more contributor
+# license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright
+# ownership. Elasticsearch B.V. licenses this file to you under
+# the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+# Auto generated from build hash f284cc16f4d4b4289bc679aa1529bb504190fe80
+# @see https://github.com/elastic/elasticsearch/tree/main/rest-api-spec
+#
+module Elasticsearch
+  module API
+    module Inference
+      module Actions
+        # Configure a Mistral inference endpoint
+        #
+        # @option arguments [String] :task_type The task type
+        # @option arguments [String] :mistral_inference_id The inference Id
+        # @option arguments [Hash] :headers Custom HTTP headers
+        # @option arguments [Hash] :body The inference endpoint's task and service settings
+        #
+        # @see https://www.elastic.co/guide/en/elasticsearch/reference/8.17/infer-service-mistral.html
+        #
+        def put_mistral(arguments = {})
+          request_opts = { endpoint: arguments[:endpoint] || 'inference.put_mistral' }
+
+          defined_params = %i[task_type mistral_inference_id].each_with_object({}) do |variable, set_variables|
+            set_variables[variable] = arguments[variable] if arguments.key?(variable)
+          end
+          request_opts[:defined_params] = defined_params unless defined_params.empty?
+
+          raise ArgumentError, "Required argument 'task_type' missing" unless arguments[:task_type]
+
+          unless arguments[:mistral_inference_id]
+            raise ArgumentError,
+                  "Required argument 'mistral_inference_id' missing"
+          end
+
+          arguments = arguments.clone
+          headers = arguments.delete(:headers) || {}
+
+          body = arguments.delete(:body)
+
+          _task_type = arguments.delete(:task_type)
+
+          _mistral_inference_id = arguments.delete(:mistral_inference_id)
+
+          method = Elasticsearch::API::HTTP_PUT
+          path   = "_inference/#{Utils.__listify(_task_type)}/#{Utils.__listify(_mistral_inference_id)}"
+          params = {}
+
+          Elasticsearch::API::Response.new(
+            perform_request(method, path, params, body, headers, request_opts)
+          )
+        end
+      end
+    end
+  end
+end
diff --git a/elasticsearch-api/lib/elasticsearch/api/actions/inference/put_openai.rb b/elasticsearch-api/lib/elasticsearch/api/actions/inference/put_openai.rb
new file mode 100644
index 000000000..dcb1a376e
--- /dev/null
+++ b/elasticsearch-api/lib/elasticsearch/api/actions/inference/put_openai.rb
@@ -0,0 +1,65 @@
+# Licensed to Elasticsearch B.V. under one or more contributor
+# license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright
+# ownership. Elasticsearch B.V. licenses this file to you under
+# the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+# Auto generated from build hash f284cc16f4d4b4289bc679aa1529bb504190fe80
+# @see https://github.com/elastic/elasticsearch/tree/main/rest-api-spec
+#
+module Elasticsearch
+  module API
+    module Inference
+      module Actions
+        # Configure an OpenAI inference endpoint
+        #
+        # @option arguments [String] :task_type The task type
+        # @option arguments [String] :openai_inference_id The inference ID
+        # @option arguments [Hash] :headers Custom HTTP headers
+        # @option arguments [Hash] :body The inference endpoint's task and service settings
+        #
+        # @see https://www.elastic.co/guide/en/elasticsearch/reference/8.17/infer-service-openai.html
+        #
+        def put_openai(arguments = {})
+          request_opts = { endpoint: arguments[:endpoint] || 'inference.put_openai' }
+
+          defined_params = %i[task_type openai_inference_id].each_with_object({}) do |variable, set_variables|
+            set_variables[variable] = arguments[variable] if arguments.key?(variable)
+          end
+          request_opts[:defined_params] = defined_params unless defined_params.empty?
+
+          raise ArgumentError, "Required argument 'task_type' missing" unless arguments[:task_type]
+          raise ArgumentError, "Required argument 'openai_inference_id' missing" unless arguments[:openai_inference_id]
+
+          arguments = arguments.clone
+          headers = arguments.delete(:headers) || {}
+
+          body = arguments.delete(:body)
+
+          _task_type = arguments.delete(:task_type)
+
+          _openai_inference_id = arguments.delete(:openai_inference_id)
+
+          method = Elasticsearch::API::HTTP_PUT
+          path   = "_inference/#{Utils.__listify(_task_type)}/#{Utils.__listify(_openai_inference_id)}"
+          params = {}
+
+          Elasticsearch::API::Response.new(
+            perform_request(method, path, params, body, headers, request_opts)
+          )
+        end
+      end
+    end
+  end
+end
diff --git a/elasticsearch-api/lib/elasticsearch/api/actions/inference/put_voyageai.rb b/elasticsearch-api/lib/elasticsearch/api/actions/inference/put_voyageai.rb
new file mode 100644
index 000000000..790403938
--- /dev/null
+++ b/elasticsearch-api/lib/elasticsearch/api/actions/inference/put_voyageai.rb
@@ -0,0 +1,69 @@
+# Licensed to Elasticsearch B.V. under one or more contributor
+# license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright
+# ownership. Elasticsearch B.V. licenses this file to you under
+# the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+# Auto generated from build hash f284cc16f4d4b4289bc679aa1529bb504190fe80
+# @see https://github.com/elastic/elasticsearch/tree/main/rest-api-spec
+#
+module Elasticsearch
+  module API
+    module Inference
+      module Actions
+        # Configure a VoyageAI inference endpoint
+        #
+        # @option arguments [String] :task_type The task type
+        # @option arguments [String] :voyageai_inference_id The inference ID
+        # @option arguments [Hash] :headers Custom HTTP headers
+        # @option arguments [Hash] :body The inference endpoint's task and service settings
+        #
+        # @see https://www.elastic.co/guide/en/elasticsearch/reference/8.17/inference-apis.html
+        #
+        def put_voyageai(arguments = {})
+          request_opts = { endpoint: arguments[:endpoint] || 'inference.put_voyageai' }
+
+          defined_params = %i[task_type voyageai_inference_id].each_with_object({}) do |variable, set_variables|
+            set_variables[variable] = arguments[variable] if arguments.key?(variable)
+          end
+          request_opts[:defined_params] = defined_params unless defined_params.empty?
+
+          raise ArgumentError, "Required argument 'task_type' missing" unless arguments[:task_type]
+
+          unless arguments[:voyageai_inference_id]
+            raise ArgumentError,
+                  "Required argument 'voyageai_inference_id' missing"
+          end
+
+          arguments = arguments.clone
+          headers = arguments.delete(:headers) || {}
+
+          body = arguments.delete(:body)
+
+          _task_type = arguments.delete(:task_type)
+
+          _voyageai_inference_id = arguments.delete(:voyageai_inference_id)
+
+          method = Elasticsearch::API::HTTP_PUT
+          path   = "_inference/#{Utils.__listify(_task_type)}/#{Utils.__listify(_voyageai_inference_id)}"
+          params = {}
+
+          Elasticsearch::API::Response.new(
+            perform_request(method, path, params, body, headers, request_opts)
+          )
+        end
+      end
+    end
+  end
+end
diff --git a/elasticsearch-api/lib/elasticsearch/api/actions/inference/put_watsonx.rb b/elasticsearch-api/lib/elasticsearch/api/actions/inference/put_watsonx.rb
new file mode 100644
index 000000000..8a66506a1
--- /dev/null
+++ b/elasticsearch-api/lib/elasticsearch/api/actions/inference/put_watsonx.rb
@@ -0,0 +1,69 @@
+# Licensed to Elasticsearch B.V. under one or more contributor
+# license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright
+# ownership. Elasticsearch B.V. licenses this file to you under
+# the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+# Auto generated from build hash f284cc16f4d4b4289bc679aa1529bb504190fe80
+# @see https://github.com/elastic/elasticsearch/tree/main/rest-api-spec
+#
+module Elasticsearch
+  module API
+    module Inference
+      module Actions
+        # Configure a Watsonx inference endpoint
+        #
+        # @option arguments [String] :task_type The task type
+        # @option arguments [String] :watsonx_inference_id The inference Id
+        # @option arguments [Hash] :headers Custom HTTP headers
+        # @option arguments [Hash] :body The inference endpoint's task and service settings
+        #
+        # @see https://www.elastic.co/guide/en/elasticsearch/reference/8.17/infer-service-watsonx-ai.html
+        #
+        def put_watsonx(arguments = {})
+          request_opts = { endpoint: arguments[:endpoint] || 'inference.put_watsonx' }
+
+          defined_params = %i[task_type watsonx_inference_id].each_with_object({}) do |variable, set_variables|
+            set_variables[variable] = arguments[variable] if arguments.key?(variable)
+          end
+          request_opts[:defined_params] = defined_params unless defined_params.empty?
+
+          raise ArgumentError, "Required argument 'task_type' missing" unless arguments[:task_type]
+
+          unless arguments[:watsonx_inference_id]
+            raise ArgumentError,
+                  "Required argument 'watsonx_inference_id' missing"
+          end
+
+          arguments = arguments.clone
+          headers = arguments.delete(:headers) || {}
+
+          body = arguments.delete(:body)
+
+          _task_type = arguments.delete(:task_type)
+
+          _watsonx_inference_id = arguments.delete(:watsonx_inference_id)
+
+          method = Elasticsearch::API::HTTP_PUT
+          path   = "_inference/#{Utils.__listify(_task_type)}/#{Utils.__listify(_watsonx_inference_id)}"
+          params = {}
+
+          Elasticsearch::API::Response.new(
+            perform_request(method, path, params, body, headers, request_opts)
+          )
+        end
+      end
+    end
+  end
+end
diff --git a/elasticsearch-api/spec/elasticsearch/api/actions/inference/put_alibabacloud_spec.rb b/elasticsearch-api/spec/elasticsearch/api/actions/inference/put_alibabacloud_spec.rb
new file mode 100644
index 000000000..0ac550822
--- /dev/null
+++ b/elasticsearch-api/spec/elasticsearch/api/actions/inference/put_alibabacloud_spec.rb
@@ -0,0 +1,36 @@
+# Licensed to Elasticsearch B.V. under one or more contributor
+# license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright
+# ownership. Elasticsearch B.V. licenses this file to you under
+# the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+require 'spec_helper'
+
+describe 'client#inference.put_alibabacloud' do
+  let(:expected_args) do
+    [
+      'PUT',
+      '_inference/foo/bar',
+      {},
+      nil,
+      {},
+      { defined_params: { alibabacloud_inference_id: 'bar', task_type: 'foo' },
+        endpoint: 'inference.put_alibabacloud' }
+    ]
+  end
+
+  it 'performs the request' do
+    expect(client_double.inference.put_alibabacloud(task_type: 'foo', alibabacloud_inference_id: 'bar')).to be_a Elasticsearch::API::Response
+  end
+end
diff --git a/elasticsearch-api/spec/elasticsearch/api/actions/inference/put_amazonbedrock_spec.rb b/elasticsearch-api/spec/elasticsearch/api/actions/inference/put_amazonbedrock_spec.rb
new file mode 100644
index 000000000..23d5b57c3
--- /dev/null
+++ b/elasticsearch-api/spec/elasticsearch/api/actions/inference/put_amazonbedrock_spec.rb
@@ -0,0 +1,36 @@
+# Licensed to Elasticsearch B.V. under one or more contributor
+# license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright
+# ownership. Elasticsearch B.V. licenses this file to you under
+# the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+require 'spec_helper'
+
+describe 'client#inference.put_amazonbedrock' do
+  let(:expected_args) do
+    [
+      'PUT',
+      '_inference/foo/bar',
+      {},
+      nil,
+      {},
+      { defined_params: { amazonbedrock_inference_id: 'bar', task_type: 'foo' },
+        endpoint: 'inference.put_amazonbedrock' }
+    ]
+  end
+
+  it 'performs the request' do
+    expect(client_double.inference.put_amazonbedrock(task_type: 'foo', amazonbedrock_inference_id: 'bar')).to be_a Elasticsearch::API::Response
+  end
+end
diff --git a/elasticsearch-api/spec/elasticsearch/api/actions/inference/put_anthropic_spec.rb b/elasticsearch-api/spec/elasticsearch/api/actions/inference/put_anthropic_spec.rb
new file mode 100644
index 000000000..3f4c22cbb
--- /dev/null
+++ b/elasticsearch-api/spec/elasticsearch/api/actions/inference/put_anthropic_spec.rb
@@ -0,0 +1,36 @@
+# Licensed to Elasticsearch B.V. under one or more contributor
+# license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright
+# ownership. Elasticsearch B.V. licenses this file to you under
+# the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+require 'spec_helper'
+
+describe 'client#inference.put_anthropic' do
+  let(:expected_args) do
+    [
+      'PUT',
+      '_inference/foo/bar',
+      {},
+      nil,
+      {},
+      { defined_params: { anthropic_inference_id: 'bar', task_type: 'foo' },
+        endpoint: 'inference.put_anthropic' }
+    ]
+  end
+
+  it 'performs the request' do
+    expect(client_double.inference.put_anthropic(task_type: 'foo', anthropic_inference_id: 'bar')).to be_a Elasticsearch::API::Response
+  end
+end
diff --git a/elasticsearch-api/spec/elasticsearch/api/actions/inference/put_azureaistudio_spec.rb b/elasticsearch-api/spec/elasticsearch/api/actions/inference/put_azureaistudio_spec.rb
new file mode 100644
index 000000000..add3ed7ee
--- /dev/null
+++ b/elasticsearch-api/spec/elasticsearch/api/actions/inference/put_azureaistudio_spec.rb
@@ -0,0 +1,36 @@
+# Licensed to Elasticsearch B.V. under one or more contributor
+# license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright
+# ownership. Elasticsearch B.V. licenses this file to you under
+# the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+require 'spec_helper'
+
+describe 'client#inference.put_azureaistudio' do
+  let(:expected_args) do
+    [
+      'PUT',
+      '_inference/foo/bar',
+      {},
+      nil,
+      {},
+      { defined_params: { azureaistudio_inference_id: 'bar', task_type: 'foo' },
+        endpoint: 'inference.put_azureaistudio' }
+    ]
+  end
+
+  it 'performs the request' do
+    expect(client_double.inference.put_azureaistudio(task_type: 'foo', azureaistudio_inference_id: 'bar')).to be_a Elasticsearch::API::Response
+  end
+end
diff --git a/elasticsearch-api/spec/elasticsearch/api/actions/inference/put_azureopenai_spec.rb b/elasticsearch-api/spec/elasticsearch/api/actions/inference/put_azureopenai_spec.rb
new file mode 100644
index 000000000..ca0ade65b
--- /dev/null
+++ b/elasticsearch-api/spec/elasticsearch/api/actions/inference/put_azureopenai_spec.rb
@@ -0,0 +1,36 @@
+# Licensed to Elasticsearch B.V. under one or more contributor
+# license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright
+# ownership. Elasticsearch B.V. licenses this file to you under
+# the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+require 'spec_helper'
+
+describe 'client#inference.put_azureopenai' do
+  let(:expected_args) do
+    [
+      'PUT',
+      '_inference/foo/bar',
+      {},
+      nil,
+      {},
+      { defined_params: { azureopenai_inference_id: 'bar', task_type: 'foo' },
+        endpoint: 'inference.put_azureopenai' }
+    ]
+  end
+
+  it 'performs the request' do
+    expect(client_double.inference.put_azureopenai(task_type: 'foo', azureopenai_inference_id: 'bar')).to be_a Elasticsearch::API::Response
+  end
+end
diff --git a/elasticsearch-api/spec/elasticsearch/api/actions/inference/put_cohere_spec.rb b/elasticsearch-api/spec/elasticsearch/api/actions/inference/put_cohere_spec.rb
new file mode 100644
index 000000000..7eb82de75
--- /dev/null
+++ b/elasticsearch-api/spec/elasticsearch/api/actions/inference/put_cohere_spec.rb
@@ -0,0 +1,36 @@
+# Licensed to Elasticsearch B.V. under one or more contributor
+# license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright
+# ownership. Elasticsearch B.V. licenses this file to you under
+# the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+require 'spec_helper'
+
+describe 'client#inference.put_cohere' do
+  let(:expected_args) do
+    [
+      'PUT',
+      '_inference/foo/bar',
+      {},
+      nil,
+      {},
+      { defined_params: { cohere_inference_id: 'bar', task_type: 'foo' },
+        endpoint: 'inference.put_cohere' }
+    ]
+  end
+
+  it 'performs the request' do
+    expect(client_double.inference.put_cohere(task_type: 'foo', cohere_inference_id: 'bar')).to be_a Elasticsearch::API::Response
+  end
+end
diff --git a/elasticsearch-api/spec/elasticsearch/api/actions/inference/put_eis_spec.rb b/elasticsearch-api/spec/elasticsearch/api/actions/inference/put_eis_spec.rb
new file mode 100644
index 000000000..fefea7305
--- /dev/null
+++ b/elasticsearch-api/spec/elasticsearch/api/actions/inference/put_eis_spec.rb
@@ -0,0 +1,36 @@
+# Licensed to Elasticsearch B.V. under one or more contributor
+# license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright
+# ownership. Elasticsearch B.V. licenses this file to you under
+# the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+require 'spec_helper'
+
+describe 'client#inference.put_eis' do
+  let(:expected_args) do
+    [
+      'PUT',
+      '_inference/foo/bar',
+      {},
+      nil,
+      {},
+      { defined_params: { eis_inference_id: 'bar', task_type: 'foo' },
+        endpoint: 'inference.put_eis' }
+    ]
+  end
+
+  it 'performs the request' do
+    expect(client_double.inference.put_eis(task_type: 'foo', eis_inference_id: 'bar')).to be_a Elasticsearch::API::Response
+  end
+end
diff --git a/elasticsearch-api/spec/elasticsearch/api/actions/inference/put_elasticsearch_spec.rb b/elasticsearch-api/spec/elasticsearch/api/actions/inference/put_elasticsearch_spec.rb
new file mode 100644
index 000000000..e91a89c85
--- /dev/null
+++ b/elasticsearch-api/spec/elasticsearch/api/actions/inference/put_elasticsearch_spec.rb
@@ -0,0 +1,36 @@
+# Licensed to Elasticsearch B.V. under one or more contributor
+# license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright
+# ownership. Elasticsearch B.V. licenses this file to you under
+# the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+require 'spec_helper'
+
+describe 'client#inference.put_elasticsearch' do
+  let(:expected_args) do
+    [
+      'PUT',
+      '_inference/foo/bar',
+      {},
+      nil,
+      {},
+      { defined_params: { elasticsearch_inference_id: 'bar', task_type: 'foo' },
+        endpoint: 'inference.put_elasticsearch' }
+    ]
+  end
+
+  it 'performs the request' do
+    expect(client_double.inference.put_elasticsearch(task_type: 'foo', elasticsearch_inference_id: 'bar')).to be_a Elasticsearch::API::Response
+  end
+end
diff --git a/elasticsearch-api/spec/elasticsearch/api/actions/inference/put_elser_spec.rb b/elasticsearch-api/spec/elasticsearch/api/actions/inference/put_elser_spec.rb
new file mode 100644
index 000000000..1862e2272
--- /dev/null
+++ b/elasticsearch-api/spec/elasticsearch/api/actions/inference/put_elser_spec.rb
@@ -0,0 +1,36 @@
+# Licensed to Elasticsearch B.V. under one or more contributor
+# license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright
+# ownership. Elasticsearch B.V. licenses this file to you under
+# the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+require 'spec_helper'
+
+describe 'client#inference.put_elser' do
+  let(:expected_args) do
+    [
+      'PUT',
+      '_inference/foo/bar',
+      {},
+      nil,
+      {},
+      { defined_params: { elser_inference_id: 'bar', task_type: 'foo' },
+        endpoint: 'inference.put_elser' }
+    ]
+  end
+
+  it 'performs the request' do
+    expect(client_double.inference.put_elser(task_type: 'foo', elser_inference_id: 'bar')).to be_a Elasticsearch::API::Response
+  end
+end
diff --git a/elasticsearch-api/spec/elasticsearch/api/actions/inference/put_googleaistudio_spec.rb b/elasticsearch-api/spec/elasticsearch/api/actions/inference/put_googleaistudio_spec.rb
new file mode 100644
index 000000000..22c528499
--- /dev/null
+++ b/elasticsearch-api/spec/elasticsearch/api/actions/inference/put_googleaistudio_spec.rb
@@ -0,0 +1,36 @@
+# Licensed to Elasticsearch B.V. under one or more contributor
+# license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright
+# ownership. Elasticsearch B.V. licenses this file to you under
+# the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+require 'spec_helper'
+
+describe 'client#inference.put_googleaistudio' do
+  let(:expected_args) do
+    [
+      'PUT',
+      '_inference/foo/bar',
+      {},
+      nil,
+      {},
+      { defined_params: { googleaistudio_inference_id: 'bar', task_type: 'foo' },
+        endpoint: 'inference.put_googleaistudio' }
+    ]
+  end
+
+  it 'performs the request' do
+    expect(client_double.inference.put_googleaistudio(task_type: 'foo', googleaistudio_inference_id: 'bar')).to be_a Elasticsearch::API::Response
+  end
+end
diff --git a/elasticsearch-api/spec/elasticsearch/api/actions/inference/put_googlevertexai_spec.rb b/elasticsearch-api/spec/elasticsearch/api/actions/inference/put_googlevertexai_spec.rb
new file mode 100644
index 000000000..ccf6c883b
--- /dev/null
+++ b/elasticsearch-api/spec/elasticsearch/api/actions/inference/put_googlevertexai_spec.rb
@@ -0,0 +1,36 @@
+# Licensed to Elasticsearch B.V. under one or more contributor
+# license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright
+# ownership. Elasticsearch B.V. licenses this file to you under
+# the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+require 'spec_helper'
+
+describe 'client#inference.put_googlevertexai' do
+  let(:expected_args) do
+    [
+      'PUT',
+      '_inference/foo/bar',
+      {},
+      nil,
+      {},
+      { defined_params: { googlevertexai_inference_id: 'bar', task_type: 'foo' },
+        endpoint: 'inference.put_googlevertexai' }
+    ]
+  end
+
+  it 'performs the request' do
+    expect(client_double.inference.put_googlevertexai(task_type: 'foo', googlevertexai_inference_id: 'bar')).to be_a Elasticsearch::API::Response
+  end
+end
diff --git a/elasticsearch-api/spec/elasticsearch/api/actions/inference/put_huggingface_spec.rb b/elasticsearch-api/spec/elasticsearch/api/actions/inference/put_huggingface_spec.rb
new file mode 100644
index 000000000..8feb11c28
--- /dev/null
+++ b/elasticsearch-api/spec/elasticsearch/api/actions/inference/put_huggingface_spec.rb
@@ -0,0 +1,36 @@
+# Licensed to Elasticsearch B.V. under one or more contributor
+# license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright
+# ownership. Elasticsearch B.V. licenses this file to you under
+# the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+require 'spec_helper'
+
+describe 'client#inference.put_hugging_face' do
+  let(:expected_args) do
+    [
+      'PUT',
+      '_inference/foo/bar',
+      {},
+      nil,
+      {},
+      { defined_params: { huggingface_inference_id: 'bar', task_type: 'foo' },
+        endpoint: 'inference.put_hugging_face' }
+    ]
+  end
+
+  it 'performs the request' do
+    expect(client_double.inference.put_hugging_face(task_type: 'foo', huggingface_inference_id: 'bar')).to be_a Elasticsearch::API::Response
+  end
+end
diff --git a/elasticsearch-api/spec/elasticsearch/api/actions/inference/put_jinaai_spec.rb b/elasticsearch-api/spec/elasticsearch/api/actions/inference/put_jinaai_spec.rb
new file mode 100644
index 000000000..bcbf0e0f0
--- /dev/null
+++ b/elasticsearch-api/spec/elasticsearch/api/actions/inference/put_jinaai_spec.rb
@@ -0,0 +1,36 @@
+# Licensed to Elasticsearch B.V. under one or more contributor
+# license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright
+# ownership. Elasticsearch B.V. licenses this file to you under
+# the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+require 'spec_helper'
+
+describe 'client#inference.put_jinaai' do
+  let(:expected_args) do
+    [
+      'PUT',
+      '_inference/foo/bar',
+      {},
+      nil,
+      {},
+      { defined_params: { jinaai_inference_id: 'bar', task_type: 'foo' },
+        endpoint: 'inference.put_jinaai' }
+    ]
+  end
+
+  it 'performs the request' do
+    expect(client_double.inference.put_jinaai(task_type: 'foo', jinaai_inference_id: 'bar')).to be_a Elasticsearch::API::Response
+  end
+end
diff --git a/elasticsearch-api/spec/elasticsearch/api/actions/inference/put_mistral_spec.rb b/elasticsearch-api/spec/elasticsearch/api/actions/inference/put_mistral_spec.rb
new file mode 100644
index 000000000..2d8d8dbd3
--- /dev/null
+++ b/elasticsearch-api/spec/elasticsearch/api/actions/inference/put_mistral_spec.rb
@@ -0,0 +1,36 @@
+# Licensed to Elasticsearch B.V. under one or more contributor
+# license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright
+# ownership. Elasticsearch B.V. licenses this file to you under
+# the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+require 'spec_helper'
+
+describe 'client#inference.put_mistral' do
+  let(:expected_args) do
+    [
+      'PUT',
+      '_inference/foo/bar',
+      {},
+      nil,
+      {},
+      { defined_params: { mistral_inference_id: 'bar', task_type: 'foo' },
+        endpoint: 'inference.put_mistral' }
+    ]
+  end
+
+  it 'performs the request' do
+    expect(client_double.inference.put_mistral(task_type: 'foo', mistral_inference_id: 'bar')).to be_a Elasticsearch::API::Response
+  end
+end
diff --git a/elasticsearch-api/spec/elasticsearch/api/actions/inference/put_openai_spec.rb b/elasticsearch-api/spec/elasticsearch/api/actions/inference/put_openai_spec.rb
new file mode 100644
index 000000000..b58dd6e56
--- /dev/null
+++ b/elasticsearch-api/spec/elasticsearch/api/actions/inference/put_openai_spec.rb
@@ -0,0 +1,36 @@
+# Licensed to Elasticsearch B.V. under one or more contributor
+# license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright
+# ownership. Elasticsearch B.V. licenses this file to you under
+# the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+require 'spec_helper'
+
+describe 'client#inference.put_openai' do
+  let(:expected_args) do
+    [
+      'PUT',
+      '_inference/foo/bar',
+      {},
+      nil,
+      {},
+      { defined_params: { openai_inference_id: 'bar', task_type: 'foo' },
+        endpoint: 'inference.put_openai' }
+    ]
+  end
+
+  it 'performs the request' do
+    expect(client_double.inference.put_openai(task_type: 'foo', openai_inference_id: 'bar')).to be_a Elasticsearch::API::Response
+  end
+end
diff --git a/elasticsearch-api/spec/elasticsearch/api/actions/inference/put_voyageai_spec.rb b/elasticsearch-api/spec/elasticsearch/api/actions/inference/put_voyageai_spec.rb
new file mode 100644
index 000000000..8bac99b82
--- /dev/null
+++ b/elasticsearch-api/spec/elasticsearch/api/actions/inference/put_voyageai_spec.rb
@@ -0,0 +1,36 @@
+# Licensed to Elasticsearch B.V. under one or more contributor
+# license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright
+# ownership. Elasticsearch B.V. licenses this file to you under
+# the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+require 'spec_helper'
+
+describe 'client#inference.put_voyageai' do
+  let(:expected_args) do
+    [
+      'PUT',
+      '_inference/foo/bar',
+      {},
+      nil,
+      {},
+      { defined_params: { voyageai_inference_id: 'bar', task_type: 'foo' },
+        endpoint: 'inference.put_voyageai' }
+    ]
+  end
+
+  it 'performs the request' do
+    expect(client_double.inference.put_voyageai(task_type: 'foo', voyageai_inference_id: 'bar')).to be_a Elasticsearch::API::Response
+  end
+end
diff --git a/elasticsearch-api/spec/elasticsearch/api/actions/inference/put_watsonx_spec.rb b/elasticsearch-api/spec/elasticsearch/api/actions/inference/put_watsonx_spec.rb
new file mode 100644
index 000000000..44245b8b0
--- /dev/null
+++ b/elasticsearch-api/spec/elasticsearch/api/actions/inference/put_watsonx_spec.rb
@@ -0,0 +1,36 @@
+# Licensed to Elasticsearch B.V. under one or more contributor
+# license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright
+# ownership. Elasticsearch B.V. licenses this file to you under
+# the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+require 'spec_helper'
+
+describe 'client#inference.put_watsonx' do
+  let(:expected_args) do
+    [
+      'PUT',
+      '_inference/foo/bar',
+      {},
+      nil,
+      {},
+      { defined_params: { watsonx_inference_id: 'bar', task_type: 'foo' },
+        endpoint: 'inference.put_watsonx' }
+    ]
+  end
+
+  it 'performs the request' do
+    expect(client_double.inference.put_watsonx(task_type: 'foo', watsonx_inference_id: 'bar')).to be_a Elasticsearch::API::Response
+  end
+end
diff --git a/elasticsearch-api/utils/Gemfile b/elasticsearch-api/utils/Gemfile
index 6f6f061b6..d7a0fe4d5 100644
--- a/elasticsearch-api/utils/Gemfile
+++ b/elasticsearch-api/utils/Gemfile
@@ -24,5 +24,5 @@ gem 'multi_json'
 gem 'pry'
 gem 'thor'
 
-gem 'rubocop', '>= 1.51' unless defined?(JRUBY_VERSION) && Gem::Version.new(JRUBY_VERSION) <= Gem::Version.new('9.4')
+gem 'rubocop', '>= 1.51' unless defined?(JRUBY_VERSION)
 gem 'debug' unless defined?(JRUBY_VERSION)