This is an automated email from the ASF dual-hosted git repository.

wenjin272 pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/flink-agents.git


The following commit(s) were added to refs/heads/main by this push:
     new f66298ed [integrations][azureai] Remove the deprecated Azure AI 
Inference integration (#988)
f66298ed is described below

commit f66298ed6ff4e7a74c7131e4b54bf3f6ec5a0383
Author: Weiqing Yang <[email protected]>
AuthorDate: Sun Aug 16 23:02:09 2026 -0700

    [integrations][azureai] Remove the deprecated Azure AI Inference 
integration (#988)
    
    Generated-by: Claude Code 2.1.226
---
 .../flink/agents/api/resource/ResourceName.java    |   6 -
 .../org/apache/flink/agents/api/yaml/Aliases.java  |   2 -
 dist/pom.xml                                       |   5 -
 dist/src/main/resources/META-INF/NOTICE            |  53 +----
 .../main/resources/META-INF/licenses/LICENSE.asm   |  27 ---
 .../main/resources/META-INF/licenses/LICENSE.azure |  21 --
 .../main/resources/META-INF/licenses/LICENSE.junit |  98 ---------
 .../resources/META-INF/licenses/LICENSE.microsoft  |  21 --
 docs/content/docs/development/chat_models.md       | 100 +--------
 docs/content/docs/development/yaml.md              |   1 -
 docs/content/docs/faq/faq.md                       |   1 -
 .../pom.xml                                        |   5 -
 .../test/ChatModelIntegrationAgent.java            |  15 --
 .../integration/test/ChatModelIntegrationTest.java |  10 +-
 ide-support/pom.xml                                |  11 -
 integrations/chat-models/azureai/pom.xml           |  54 -----
 .../azureai/AzureAIChatModelConnection.java        | 234 ---------------------
 .../chatmodels/azureai/AzureAIChatModelSetup.java  |  64 ------
 integrations/chat-models/pom.xml                   |   1 -
 python/flink_agents/api/resource.py                |   4 -
 python/flink_agents/api/yaml/aliases.py            |   2 -
 21 files changed, 12 insertions(+), 723 deletions(-)

diff --git 
a/api/src/main/java/org/apache/flink/agents/api/resource/ResourceName.java 
b/api/src/main/java/org/apache/flink/agents/api/resource/ResourceName.java
index ccacfef3..3382ee6a 100644
--- a/api/src/main/java/org/apache/flink/agents/api/resource/ResourceName.java
+++ b/api/src/main/java/org/apache/flink/agents/api/resource/ResourceName.java
@@ -53,12 +53,6 @@ public final class ResourceName {
         public static final String ANTHROPIC_SETUP =
                 
"org.apache.flink.agents.integrations.chatmodels.anthropic.AnthropicChatModelSetup";
 
-        // Azure
-        public static final String AZURE_CONNECTION =
-                
"org.apache.flink.agents.integrations.chatmodels.azureai.AzureAIChatModelConnection";
-        public static final String AZURE_SETUP =
-                
"org.apache.flink.agents.integrations.chatmodels.azureai.AzureAIChatModelSetup";
-
         // Bedrock
         public static final String BEDROCK_CONNECTION =
                 
"org.apache.flink.agents.integrations.chatmodels.bedrock.BedrockChatModelConnection";
diff --git a/api/src/main/java/org/apache/flink/agents/api/yaml/Aliases.java 
b/api/src/main/java/org/apache/flink/agents/api/yaml/Aliases.java
index 6798ef87..ec2bb306 100644
--- a/api/src/main/java/org/apache/flink/agents/api/yaml/Aliases.java
+++ b/api/src/main/java/org/apache/flink/agents/api/yaml/Aliases.java
@@ -88,7 +88,6 @@ public final class Aliases {
         chatConnJava.put("anthropic", 
ResourceName.ChatModel.ANTHROPIC_CONNECTION);
         chatConnJava.put("gemini", ResourceName.ChatModel.GEMINI_CONNECTION);
         chatConnJava.put("azure_openai", 
ResourceName.ChatModel.AZURE_OPENAI_CONNECTION);
-        chatConnJava.put("azure", ResourceName.ChatModel.AZURE_CONNECTION);
         chatConnJava.put("bedrock", ResourceName.ChatModel.BEDROCK_CONNECTION);
         chatConnJava.put("vllm", ResourceName.ChatModel.VLLM_CONNECTION);
         Map<String, String> chatConnPython = new HashMap<>();
@@ -108,7 +107,6 @@ public final class Aliases {
         chatJava.put("anthropic", ResourceName.ChatModel.ANTHROPIC_SETUP);
         chatJava.put("gemini", ResourceName.ChatModel.GEMINI_SETUP);
         chatJava.put("azure_openai", 
ResourceName.ChatModel.AZURE_OPENAI_SETUP);
-        chatJava.put("azure", ResourceName.ChatModel.AZURE_SETUP);
         chatJava.put("bedrock", ResourceName.ChatModel.BEDROCK_SETUP);
         chatJava.put("vllm", ResourceName.ChatModel.VLLM_SETUP);
         Map<String, String> chatPython = new HashMap<>();
diff --git a/dist/pom.xml b/dist/pom.xml
index 421f2379..01c24343 100644
--- a/dist/pom.xml
+++ b/dist/pom.xml
@@ -77,11 +77,6 @@ under the License.
             
<artifactId>flink-agents-integrations-chat-models-anthropic</artifactId>
             <version>${project.version}</version>
         </dependency>
-        <dependency>
-            <groupId>org.apache.flink</groupId>
-            
<artifactId>flink-agents-integrations-chat-models-azureai</artifactId>
-            <version>${project.version}</version>
-        </dependency>
         <dependency>
             <groupId>org.apache.flink</groupId>
             
<artifactId>flink-agents-integrations-chat-models-bedrock</artifactId>
diff --git a/dist/src/main/resources/META-INF/NOTICE 
b/dist/src/main/resources/META-INF/NOTICE
index b6ce1fb8..a1cf484c 100644
--- a/dist/src/main/resources/META-INF/NOTICE
+++ b/dist/src/main/resources/META-INF/NOTICE
@@ -52,44 +52,16 @@ This project bundles the following dependencies under the 
Apache Software Licens
 - org.jetbrains.kotlin:kotlin-reflect:1.8.10
 - org.yaml:snakeyaml:2.3
 - io.netty:netty-handler:4.1.118.Final
-- io.netty:netty-handler-proxy:4.1.118.Final
 - io.netty:netty-resolver:4.1.118.Final
 - io.netty:netty-transport:4.1.118.Final
-- io.netty:netty-codec-socks:4.1.118.Final
 - io.netty:netty-buffer:4.1.118.Final
 - io.netty:netty-codec:4.1.118.Final
 - io.netty:netty-codec-http:4.1.118.Final
 - io.netty:netty-codec-http2:4.1.118.Final
 - io.netty:netty-transport-native-unix-common:4.1.118.Final
-- io.netty:netty-transport-native-epoll:linux-x86_64:4.1.118.Final
 - io.netty:netty-transport-classes-epoll:4.1.118.Final
-- io.netty:netty-transport-native-kqueue:osx-x86_64:4.1.118.Final
-- io.netty:netty-transport-classes-kqueue:4.1.118.Final
-- io.netty:netty-tcnative-boringssl-static:2.0.70.Final
-- io.netty:netty-tcnative-boringssl-static:linux-x86_64:2.0.70.Final
-- io.netty:netty-tcnative-boringssl-static:linux-aarch_64:2.0.70.Final
-- io.netty:netty-tcnative-boringssl-static:osx-x86_64:2.0.70.Final
-- io.netty:netty-tcnative-boringssl-static:osx-aarch_64:2.0.70.Final
-- io.netty:netty-tcnative-boringssl-static:windows-x86_64:2.0.70.Final
-- io.netty:netty-tcnative-classes:2.0.70.Final
-- io.projectreactor.netty:reactor-netty-http:1.0.48
-- io.netty:netty-resolver-dns:4.1.112.Final
-- io.netty:netty-codec-dns:4.1.112.Final
-- io.netty:netty-resolver-dns-native-macos:osx-x86_64:4.1.112.Final
-- io.netty:netty-resolver-dns-classes-macos:4.1.112.Final
-- io.projectreactor.netty:reactor-netty-core:1.0.48
 - io.netty:netty-common:4.1.118.Final
-- io.projectreactor:reactor-core:3.4.41
-- io.projectreactor:reactor-test:3.4.41
-- io.vertx:vertx-core:4.5.13
-- org.apache.ant:ant:1.10.14
-- org.apache.ant:ant-launcher:1.10.14
-- com.nimbusds:content-type:2.3
-- com.nimbusds:lang-tag:1.7
-- com.nimbusds:nimbus-jose-jwt:9.40
-- com.nimbusds:oauth2-oidc-sdk:11.18
-- net.minidev:json-smart:2.5.0
-- net.minidev:accessors-smart:2.5.0
+- io.projectreactor:reactor-core:3.7.0
 - org.elasticsearch.client:elasticsearch-rest-client:8.19.0
 - org.apache.httpcomponents:httpclient:4.5.13
 - org.apache.httpcomponents:httpcore:4.4.16
@@ -102,13 +74,10 @@ This project bundles the following dependencies under the 
Apache Software Licens
 - io.opentelemetry:opentelemetry-context:1.29.0
 - com.networknt:json-schema-validator:2.0.0
 - com.ethlo.time:itu:1.14.0
-- org.opentest4j:opentest4j:1.3.0
-- org.apiguardian:apiguardian-api:1.1.2
 - org.apache.commons:commons-collections4:4.3
 - org.apache.commons:commons-lang3:3.12.0
 - org.apache.commons:commons-pool2:2.12.0
 - org.apache.commons:commons-text:1.10.0
-- com.github.stephenc.jcip:jcip-annotations:1.0-1
 - io.milvus:milvus-sdk-java:2.6.18
 - org.apache.fluss:fluss-client:0.9.0-incubating
 - com.google.code.gson:gson:2.13.1
@@ -147,8 +116,6 @@ This project bundles the following dependencies under the 
Apache Software Licens
 - software.amazon.awssdk:json-utils:2.32.16
 - software.amazon.awssdk:third-party-jackson-core:2.32.16
 - software.amazon.eventstream:eventstream:1.0.1
-- net.java.dev.jna:jna:5.13.0
-- net.java.dev.jna:jna-platform:5.6.0
 - com.google.genai:google-genai:1.56.0
 - com.google.auto.value:auto-value-annotations:1.11.0
 - com.google.http-client:google-http-client:1.46.2
@@ -166,19 +133,7 @@ See bundled license files for details.
 - com.anthropic:anthropic-java:2.11.1
 - com.anthropic:anthropic-java-client-okhttp:2.11.1
 - com.anthropic:anthropic-java-core:2.11.1
-- com.azure:azure-ai-inference:1.0.0-beta.5
-- com.azure:azure-identity:1.13.3
-- com.azure:azure-json:1.5.0
-- com.azure:azure-core:1.55.3
-- com.azure:azure-xml:1.2.0
-- com.azure:azure-core-http-netty:1.15.11
-- com.azure:azure-core-test:1.27.0-beta.8
-- com.azure:azure-core-http-jdk-httpclient:1.0.3
-- com.azure:azure-core-http-okhttp:1.12.10
-- com.azure:azure-core-http-vertx:1.0.3
 - org.reactivestreams:reactive-streams:1.0.4
-- com.microsoft.azure:msal4j:1.17.1
-- com.microsoft.azure:msal4j-persistence-extension:1.3.0
 - io.modelcontextprotocol.sdk:mcp:0.16.0
 - io.modelcontextprotocol.sdk:mcp-json-jackson2:0.16.0
 - io.modelcontextprotocol.sdk:mcp-json:0.16.0
@@ -200,7 +155,6 @@ See bundled license files for details.
 - com.google.protobuf:protobuf-java:4.33.5
 - com.google.re2j:re2j:1.8
 - org.antlr:antlr4-runtime:4.13.2
-- org.ow2.asm:asm:9.3
 - org.threeten:threeten-extra:1.8.0
 - com.google.api:api-common:2.45.0
 - com.google.auth:google-auth-library-credentials:1.33.0
@@ -211,11 +165,6 @@ See bundled license files for details.
 
 - jakarta.json:jakarta.json-api:2.0.1
 - org.eclipse.parsson:parsson:1.0.5
-- org.junit.jupiter:junit-jupiter-api:5.10.1
-- org.junit.jupiter:junit-jupiter-params:5.10.1
-- org.junit.jupiter:junit-jupiter-engine:5.10.1
-- org.junit.platform:junit-platform-commons:1.10.1
-- org.junit.platform:junit-platform-engine:1.10.1
 
 This project bundles the following dependencies under the CDDL 1.1 license, or 
alternatively
 under the GNU General Public License version 2 with the Classpath Exception.
diff --git a/dist/src/main/resources/META-INF/licenses/LICENSE.asm 
b/dist/src/main/resources/META-INF/licenses/LICENSE.asm
deleted file mode 100644
index 1a71c4ce..00000000
--- a/dist/src/main/resources/META-INF/licenses/LICENSE.asm
+++ /dev/null
@@ -1,27 +0,0 @@
-ASM: a very small and fast Java bytecode manipulation framework
-Copyright (c) 2000-2011 INRIA, France Telecom
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions
-are met:
-1. Redistributions of source code must retain the above copyright
-   notice, this list of conditions and the following disclaimer.
-2. Redistributions in binary form must reproduce the above copyright
-   notice, this list of conditions and the following disclaimer in the
-   documentation and/or other materials provided with the distribution.
-3. Neither the name of the copyright holders nor the names of its
-   contributors may be used to endorse or promote products derived from
-   this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
-LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
-THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/dist/src/main/resources/META-INF/licenses/LICENSE.azure 
b/dist/src/main/resources/META-INF/licenses/LICENSE.azure
deleted file mode 100644
index 49d21669..00000000
--- a/dist/src/main/resources/META-INF/licenses/LICENSE.azure
+++ /dev/null
@@ -1,21 +0,0 @@
-The MIT License (MIT)
-
-Copyright (c) 2015 Microsoft
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
\ No newline at end of file
diff --git a/dist/src/main/resources/META-INF/licenses/LICENSE.junit 
b/dist/src/main/resources/META-INF/licenses/LICENSE.junit
deleted file mode 100644
index 8ebced11..00000000
--- a/dist/src/main/resources/META-INF/licenses/LICENSE.junit
+++ /dev/null
@@ -1,98 +0,0 @@
-Eclipse Public License - v 2.0
-==============================
-
-THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE PUBLIC 
LICENSE (“AGREEMENT”). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM 
CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
-
-### 1. Definitions
-
-“Contribution” means:
-* **a)** in the case of the initial Contributor, the initial content 
Distributed under this Agreement, and
-* **b)** in the case of each subsequent Contributor:
-       * **i)** changes to the Program, and
-       * **ii)** additions to the Program;
-where such changes and/or additions to the Program originate from and are 
Distributed by that particular Contributor. A Contribution “originates” from a 
Contributor if it was added to the Program by such Contributor itself or anyone 
acting on such Contributor's behalf. Contributions do not include changes or 
additions to the Program that are not Modified Works.
-
-“Contributor” means any person or entity that Distributes the Program.
-
-“Licensed Patents” mean patent claims licensable by a Contributor which are 
necessarily infringed by the use or sale of its Contribution alone or when 
combined with the Program.
-
-“Program” means the Contributions Distributed in accordance with this 
Agreement.
-
-“Recipient” means anyone who receives the Program under this Agreement or any 
Secondary License (as applicable), including Contributors.
-
-“Derivative Works” shall mean any work, whether in Source Code or other form, 
that is based on (or derived from) the Program and for which the editorial 
revisions, annotations, elaborations, or other modifications represent, as a 
whole, an original work of authorship.
-
-“Modified Works” shall mean any work in Source Code or other form that results 
from an addition to, deletion from, or modification of the contents of the 
Program, including, for purposes of clarity any new file in Source Code form 
that contains any contents of the Program. Modified Works shall not include 
works that contain only declarations, interfaces, types, classes, structures, 
or files of the Program solely in each case in order to link to, bind by name, 
or subclass the Program or M [...]
-
-“Distribute” means the acts of **a)** distributing or **b)** making available 
in any manner that enables the transfer of a copy.
-
-“Source Code” means the form of a Program preferred for making modifications, 
including but not limited to software source code, documentation source, and 
configuration files.
-
-“Secondary License” means either the GNU General Public License, Version 2.0, 
or any later versions of that license, including any exceptions or additional 
permissions as identified by the initial Contributor.
-
-### 2. Grant of Rights
-
-**a)** Subject to the terms of this Agreement, each Contributor hereby grants 
Recipient a non-exclusive, worldwide, royalty-free copyright license to 
reproduce, prepare Derivative Works of, publicly display, publicly perform, 
Distribute and sublicense the Contribution of such Contributor, if any, and 
such Derivative Works.
-
-**b)** Subject to the terms of this Agreement, each Contributor hereby grants 
Recipient a non-exclusive, worldwide, royalty-free patent license under 
Licensed Patents to make, use, sell, offer to sell, import and otherwise 
transfer the Contribution of such Contributor, if any, in Source Code or other 
form. This patent license shall apply to the combination of the Contribution 
and the Program if, at the time the Contribution is added by the Contributor, 
such addition of the Contribution c [...]
-
-**c)** Recipient understands that although each Contributor grants the 
licenses to its Contributions set forth herein, no assurances are provided by 
any Contributor that the Program does not infringe the patent or other 
intellectual property rights of any other entity. Each Contributor disclaims 
any liability to Recipient for claims brought by any other entity based on 
infringement of intellectual property rights or otherwise. As a condition to 
exercising the rights and licenses granted  [...]
-
-**d)** Each Contributor represents that to its knowledge it has sufficient 
copyright rights in its Contribution, if any, to grant the copyright license 
set forth in this Agreement.
-
-**e)** Notwithstanding the terms of any Secondary License, no Contributor 
makes additional grants to any Recipient (other than those set forth in this 
Agreement) as a result of such Recipient's receipt of the Program under the 
terms of a Secondary License (if permitted under the terms of Section 3).
-
-### 3. Requirements
-
-**3.1** If a Contributor Distributes the Program in any form, then:
-
-* **a)** the Program must also be made available as Source Code, in accordance 
with section 3.2, and the Contributor must accompany the Program with a 
statement that the Source Code for the Program is available under this 
Agreement, and informs Recipients how to obtain it in a reasonable manner on or 
through a medium customarily used for software exchange; and
-
-* **b)** the Contributor may Distribute the Program under a license different 
than this Agreement, provided that such license:
-       * **i)** effectively disclaims on behalf of all other Contributors all 
warranties and conditions, express and implied, including warranties or 
conditions of title and non-infringement, and implied warranties or conditions 
of merchantability and fitness for a particular purpose;
-       * **ii)** effectively excludes on behalf of all other Contributors all 
liability for damages, including direct, indirect, special, incidental and 
consequential damages, such as lost profits;
-       * **iii)** does not attempt to limit or alter the recipients' rights in 
the Source Code under section 3.2; and
-       * **iv)** requires any subsequent distribution of the Program by any 
party to be under a license that satisfies the requirements of this section 3.
-
-**3.2** When the Program is Distributed as Source Code:
-
-* **a)** it must be made available under this Agreement, or if the Program 
**(i)** is combined with other material in a separate file or files made 
available under a Secondary License, and **(ii)** the initial Contributor 
attached to the Source Code the notice described in Exhibit A of this 
Agreement, then the Program may be made available under the terms of such 
Secondary Licenses, and
-* **b)** a copy of this Agreement must be included with each copy of the 
Program.
-
-**3.3** Contributors may not remove or alter any copyright, patent, trademark, 
attribution notices, disclaimers of warranty, or limitations of liability 
(“notices”) contained within the Program from any copy of the Program which 
they Distribute, provided that Contributors may add their own appropriate 
notices.
-
-### 4. Commercial Distribution
-
-Commercial distributors of software may accept certain responsibilities with 
respect to end users, business partners and the like. While this license is 
intended to facilitate the commercial use of the Program, the Contributor who 
includes the Program in a commercial product offering should do so in a manner 
which does not create potential liability for other Contributors. Therefore, if 
a Contributor includes the Program in a commercial product offering, such 
Contributor (“Commercial Con [...]
-
-For example, a Contributor might include the Program in a commercial product 
offering, Product X. That Contributor is then a Commercial Contributor. If that 
Commercial Contributor then makes performance claims, or offers warranties 
related to Product X, those performance claims and warranties are such 
Commercial Contributor's responsibility alone. Under this section, the 
Commercial Contributor would have to defend claims against the other 
Contributors related to those performance claims  [...]
-
-### 5. No Warranty
-
-EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT PERMITTED 
BY APPLICABLE LAW, THE PROGRAM IS PROVIDED ON AN “AS IS” BASIS, WITHOUT 
WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, 
WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, 
MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely 
responsible for determining the appropriateness of using and distributing the 
Program and assumes all risks assoc [...]
-
-### 6. Disclaimer of Liability
-
-EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT PERMITTED 
BY APPLICABLE LAW, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY 
LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 
CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER 
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
OR DISTRIBUTION OF THE PROGRAM OR THE EX [...]
-
-### 7. General
-
-If any provision of this Agreement is invalid or unenforceable under 
applicable law, it shall not affect the validity or enforceability of the 
remainder of the terms of this Agreement, and without further action by the 
parties hereto, such provision shall be reformed to the minimum extent 
necessary to make such provision valid and enforceable.
-
-If Recipient institutes patent litigation against any entity (including a 
cross-claim or counterclaim in a lawsuit) alleging that the Program itself 
(excluding combinations of the Program with other software or hardware) 
infringes such Recipient's patent(s), then such Recipient's rights granted 
under Section 2(b) shall terminate as of the date such litigation is filed.
-
-All Recipient's rights under this Agreement shall terminate if it fails to 
comply with any of the material terms or conditions of this Agreement and does 
not cure such failure in a reasonable period of time after becoming aware of 
such noncompliance. If all Recipient's rights under this Agreement terminate, 
Recipient agrees to cease use and distribution of the Program as soon as 
reasonably practicable. However, Recipient's obligations under this Agreement 
and any licenses granted by Reci [...]
-
-Everyone is permitted to copy and distribute copies of this Agreement, but in 
order to avoid inconsistency the Agreement is copyrighted and may only be 
modified in the following manner. The Agreement Steward reserves the right to 
publish new versions (including revisions) of this Agreement from time to time. 
No one other than the Agreement Steward has the right to modify this Agreement. 
The Eclipse Foundation is the initial Agreement Steward. The Eclipse Foundation 
may assign the respons [...]
-
-Except as expressly stated in Sections 2(a) and 2(b) above, Recipient receives 
no rights or licenses to the intellectual property of any Contributor under 
this Agreement, whether expressly, by implication, estoppel or otherwise. All 
rights in the Program not expressly granted under this Agreement are reserved. 
Nothing in this Agreement is intended to be enforceable by any entity that is 
not a Contributor or Recipient. No third-party beneficiary rights are created 
under this Agreement.
-
-#### Exhibit A - Form of Secondary Licenses Notice
-
-> “This Source Code may also be made available under the following Secondary 
Licenses when the conditions for such availability set forth in the Eclipse 
Public License, v. 2.0 are satisfied: {name license(s), version(s), and 
exceptions or additional permissions here}.”
-
-Simply including a copy of this Agreement, including this Exhibit A is not 
sufficient to license the Source Code under Secondary Licenses.
-
-If it is not possible or desirable to put the notice in a particular file, 
then You may include the notice in a location (such as a LICENSE file in a 
relevant directory) where a recipient would be likely to look for such a notice.
-
-You may add additional accurate notices of copyright ownership.
\ No newline at end of file
diff --git a/dist/src/main/resources/META-INF/licenses/LICENSE.microsoft 
b/dist/src/main/resources/META-INF/licenses/LICENSE.microsoft
deleted file mode 100644
index d1ca00f2..00000000
--- a/dist/src/main/resources/META-INF/licenses/LICENSE.microsoft
+++ /dev/null
@@ -1,21 +0,0 @@
-    MIT License
-
-    Copyright (c) Microsoft Corporation. All rights reserved.
-
-    Permission is hereby granted, free of charge, to any person obtaining a 
copy
-    of this software and associated documentation files (the "Software"), to 
deal
-    in the Software without restriction, including without limitation the 
rights
-    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-    copies of the Software, and to permit persons to whom the Software is
-    furnished to do so, subject to the following conditions:
-
-    The above copyright notice and this permission notice shall be included in 
all
-    copies or substantial portions of the Software.
-
-    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
FROM,
-    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 
THE
-    SOFTWARE
\ No newline at end of file
diff --git a/docs/content/docs/development/chat_models.md 
b/docs/content/docs/development/chat_models.md
index 63b1862e..aad8c12a 100644
--- a/docs/content/docs/development/chat_models.md
+++ b/docs/content/docs/development/chat_models.md
@@ -390,105 +390,25 @@ Some popular options include:
 Model availability and specifications may change. Always check the official 
Anthropic documentation for the latest information before implementing in 
production.
 {{< /hint >}}
 
-### Azure AI
-
-Azure AI provides cloud-based chat models through Azure AI Inference API, 
supporting various models including Llama, Mistral, Phi, and other models 
deployed via Azure AI Studio.
+### Azure OpenAI
 
-{{< hint info >}}
-Azure AI is only supported in Java currently. To use Azure AI from Python 
agents, see [Using Cross-Language Providers](#using-cross-language-providers).
-{{< /hint >}}
+Azure OpenAI provides access to OpenAI models (GPT-4, GPT-4o, etc.) through 
Azure's cloud infrastructure, using the same OpenAI SDK with Azure-specific 
authentication and endpoints. This offers enterprise security, compliance, and 
regional availability while using familiar OpenAI APIs.
 
 {{< hint warning >}}
-**Azure AI vs Azure OpenAI:** Azure AI uses the Azure AI Inference API to 
access models deployed via Azure AI Studio (Llama, Mistral, Phi, etc.). If you 
want to use OpenAI models (GPT-4, etc.) hosted on Azure, see [Azure 
OpenAI](#azure-openai) instead.
-{{< /hint >}}
-
-#### Prerequisites
-
-1. Create an Azure AI resource in the [Azure Portal](https://portal.azure.com/)
-2. Obtain your endpoint URL and API key from the Azure AI resource
-
-#### AzureAIChatModelConnection Parameters
-
-{{< tabs "AzureAIChatModelConnection Parameters" >}}
-
-{{< tab "Java" >}}
-
-| Parameter | Type   | Default  | Description                            |
-|-----------|--------|----------|----------------------------------------|
-| `endpoint` | String | Required | Azure AI service endpoint URL          |
-| `apiKey`   | String | Required | Azure AI API key for authentication   |
-
-{{< /tab >}}
-
-{{< /tabs >}}
-
-#### AzureAIChatModelSetup Parameters
-
-{{< tabs "AzureAIChatModelSetup Parameters" >}}
-
-{{< tab "Java" >}}
-
-| Parameter    | Type             | Default  | Description                     
                 |
-|--------------|------------------|----------|--------------------------------------------------|
-| `connection` | String           | Required | Reference to connection method 
name              |
-| `model`      | String           | Required | Name of the chat model to use 
(e.g., "gpt-4o")   |
-| `prompt`     | Prompt \| String | None     | Prompt template or reference to 
prompt resource  |
-| `tools`      | List[String]     | None     | List of tool names available to 
the model        |
-
-{{< /tab >}}
-
-{{< /tabs >}}
-
-#### Usage Example
-
-{{< tabs "Azure AI Usage Example" >}}
+**Migrating from Azure AI:** `AzureAIChatModelConnection` and 
`AzureAIChatModelSetup` have been removed. Replace them with 
`OpenAICompletionsConnection` and `OpenAICompletionsSetup` (see 
[OpenAI](#openai)), pointed at a Microsoft Foundry OpenAI v1 endpoint. There 
are two declarations to change, not one.
 
-{{< tab "Java" >}}
-```java
-public class MyAgent extends Agent {
-    @ChatModelConnection
-    public static ResourceDescriptor azureAIConnection() {
-        return 
ResourceDescriptor.Builder.newBuilder(ResourceName.ChatModel.AZURE_CONNECTION)
-                .addInitialArgument("endpoint", 
"https://your-resource.inference.ai.azure.com";)
-                .addInitialArgument("apiKey", "your-api-key-here")
-                .build();
-    }
-
-    @ChatModelSetup
-    public static ResourceDescriptor azureAIChatModel() {
-        return 
ResourceDescriptor.Builder.newBuilder(ResourceName.ChatModel.AZURE_SETUP)
-                .addInitialArgument("connection", "azureAIConnection")
-                .addInitialArgument("model", "gpt-4o")
-                .build();
-    }
-    
-    ...
-}
-```
-{{< /tab >}}
+On the connection, `AzureAIChatModelConnection` → 
`OpenAICompletionsConnection`:
 
-{{< /tabs >}}
+- `endpoint` becomes `api_base_url`, **and the value changes shape, not just 
the key**: `https://<resource>.services.ai.azure.com/models` becomes 
`https://<resource>.openai.azure.com/openai/v1/`. 
`https://<resource>.services.ai.azure.com/openai/v1/` is also accepted. 
Carrying the old value over unchanged will not work.
+- `apiKey` becomes `api_key`.
 
-#### Available Models
+On the setup, `AzureAIChatModelSetup` → `OpenAICompletionsSetup`:
 
-Azure AI supports various models through the Azure AI Inference API. Visit the 
[Azure AI Model Catalog](https://ai.azure.com/explore/models) for the complete 
and up-to-date list of available models.
+- Set `model` explicitly to your Foundry deployment name. Leaving it out is 
**not** reported as a configuration error: `OpenAICompletionsSetup` substitutes 
its own OpenAI default (`gpt-4o-mini`), and on the OpenAI v1 route that value 
is read as a deployment name. If no deployment on the resource carries that 
name, the request fails later at the provider; if one does, it is used silently 
in place of the deployment you meant.
 
-Some popular options include:
-- **GPT-4o** (gpt-4o)
-- **GPT-4** (gpt-4)
-- **GPT-4 Turbo** (gpt-4-turbo)
-- **GPT-3.5 Turbo** (gpt-3.5-turbo)
+In YAML, `clazz: azure` no longer resolves to anything. Use `clazz: 
openai_completions` with `type: java`, in both `chat_model_connections` and 
`chat_model_setups`.
 
-{{< hint warning >}}
-Model availability and specifications may change. Always check the official 
Azure AI documentation for the latest information before implementing in 
production.
-{{< /hint >}}
-
-### Azure OpenAI
-
-Azure OpenAI provides access to OpenAI models (GPT-4, GPT-4o, etc.) through 
Azure's cloud infrastructure, using the same OpenAI SDK with Azure-specific 
authentication and endpoints. This offers enterprise security, compliance, and 
regional availability while using familiar OpenAI APIs.
-
-{{< hint warning >}}
-**Azure OpenAI vs Azure AI:** Azure OpenAI uses the OpenAI SDK to access 
OpenAI models (GPT-4, etc.) hosted on Azure. If you want to use other models 
like Llama, Mistral, or Phi deployed via Azure AI Studio, see [Azure 
AI](#azure-ai) instead.
+The target is `OpenAICompletionsConnection` rather than 
`AzureOpenAIChatModelConnection` because the `/openai/v1/` route uses implicit 
versioning and takes no `api-version`, which `AzureOpenAIChatModelConnection` 
requires.
 {{< /hint >}}
 
 #### Prerequisites
diff --git a/docs/content/docs/development/yaml.md 
b/docs/content/docs/development/yaml.md
index 56684d63..b70653f7 100644
--- a/docs/content/docs/development/yaml.md
+++ b/docs/content/docs/development/yaml.md
@@ -530,7 +530,6 @@ Common chat-model aliases:
 | `anthropic`          | Anthropic                   | Anthropic               
    |
 | `gemini`             | —                           | Gemini (Java)           
    |
 | `azure_openai`       | Azure OpenAI (Python)       | Azure OpenAI (Java)     
    |
-| `azure`              | —                           | Azure AI (Java)         
    |
 | `bedrock`            | —                           | Bedrock (Java)          
    |
 | `tongyi`             | Tongyi (Python)             | —                       
    |
 | `vllm`               | vLLM (Python)               | vLLM (Java)             
    |
diff --git a/docs/content/docs/faq/faq.md b/docs/content/docs/faq/faq.md
index 51f20283..2e0159a0 100644
--- a/docs/content/docs/faq/faq.md
+++ b/docs/content/docs/faq/faq.md
@@ -99,7 +99,6 @@ Flink Agents provides built-in integrations for many 
ecosystem providers. Some i
 |---|---|---|
 | [Amazon Bedrock]({{< ref "docs/development/chat_models#amazon-bedrock" >}}) 
| ❌ | ✅ |
 | [Anthropic]({{< ref "docs/development/chat_models#anthropic" >}}) | ✅ | ✅ |
-| [Azure AI]({{< ref "docs/development/chat_models#azure-ai" >}}) | ❌ | ✅ |
 | [Azure OpenAI]({{< ref "docs/development/chat_models#azure-openai" >}}) | ✅ 
| ✅ |
 | [Gemini]({{< ref "docs/development/chat_models#gemini" >}}) | ❌ | ✅ |
 | [Ollama]({{< ref "docs/development/chat_models#ollama" >}}) | ✅ | ✅ |
diff --git a/e2e-test/flink-agents-end-to-end-tests-integration/pom.xml 
b/e2e-test/flink-agents-end-to-end-tests-integration/pom.xml
index ea5aeb8d..19aaf553 100644
--- a/e2e-test/flink-agents-end-to-end-tests-integration/pom.xml
+++ b/e2e-test/flink-agents-end-to-end-tests-integration/pom.xml
@@ -80,11 +80,6 @@ under the License.
             
<artifactId>flink-agents-integrations-chat-models-anthropic</artifactId>
             <version>${project.version}</version>
         </dependency>
-        <dependency>
-            <groupId>org.apache.flink</groupId>
-            
<artifactId>flink-agents-integrations-chat-models-azureai</artifactId>
-            <version>${project.version}</version>
-        </dependency>
         <dependency>
             <groupId>org.apache.flink</groupId>
             
<artifactId>flink-agents-integrations-chat-models-openai</artifactId>
diff --git 
a/e2e-test/flink-agents-end-to-end-tests-integration/src/test/java/org/apache/flink/agents/integration/test/ChatModelIntegrationAgent.java
 
b/e2e-test/flink-agents-end-to-end-tests-integration/src/test/java/org/apache/flink/agents/integration/test/ChatModelIntegrationAgent.java
index ee64d1df..2ad6bacf 100644
--- 
a/e2e-test/flink-agents-end-to-end-tests-integration/src/test/java/org/apache/flink/agents/integration/test/ChatModelIntegrationAgent.java
+++ 
b/e2e-test/flink-agents-end-to-end-tests-integration/src/test/java/org/apache/flink/agents/integration/test/ChatModelIntegrationAgent.java
@@ -74,13 +74,6 @@ public class ChatModelIntegrationAgent extends Agent {
                     .addInitialArgument("endpoint", "http://localhost:11434";)
                     .addInitialArgument("requestTimeout", 240)
                     .build();
-        } else if (provider.equals("AZURE")) {
-            String endpoint = System.getenv().get("AZURE_ENDPOINT");
-            String apiKey = System.getenv().get("AZURE_API_KEY");
-            return 
ResourceDescriptor.Builder.newBuilder(ResourceName.ChatModel.AZURE_CONNECTION)
-                    .addInitialArgument("endpoint", endpoint)
-                    .addInitialArgument("apiKey", apiKey)
-                    .build();
         } else if (provider.equals("OPENAI")) {
             String apiKey = System.getenv().get("OPENAI_API_KEY");
             return ResourceDescriptor.Builder.newBuilder(
@@ -127,14 +120,6 @@ public class ChatModelIntegrationAgent extends Agent {
                             "tools",
                             List.of("calculateBMI", "convertTemperature", 
"createRandomNumber"))
                     .build();
-        } else if (provider.equals("AZURE")) {
-            return 
ResourceDescriptor.Builder.newBuilder(ResourceName.ChatModel.AZURE_SETUP)
-                    .addInitialArgument("connection", "chatModelConnection")
-                    .addInitialArgument("model", "gpt-4o")
-                    .addInitialArgument(
-                            "tools",
-                            List.of("calculateBMI", "convertTemperature", 
"createRandomNumber"))
-                    .build();
         } else if (provider.equals("ANTHROPIC")) {
             return 
ResourceDescriptor.Builder.newBuilder(ResourceName.ChatModel.ANTHROPIC_SETUP)
                     .addInitialArgument("connection", "chatModelConnection")
diff --git 
a/e2e-test/flink-agents-end-to-end-tests-integration/src/test/java/org/apache/flink/agents/integration/test/ChatModelIntegrationTest.java
 
b/e2e-test/flink-agents-end-to-end-tests-integration/src/test/java/org/apache/flink/agents/integration/test/ChatModelIntegrationTest.java
index de967858..d51852b8 100644
--- 
a/e2e-test/flink-agents-end-to-end-tests-integration/src/test/java/org/apache/flink/agents/integration/test/ChatModelIntegrationTest.java
+++ 
b/e2e-test/flink-agents-end-to-end-tests-integration/src/test/java/org/apache/flink/agents/integration/test/ChatModelIntegrationTest.java
@@ -50,15 +50,7 @@ public class ChatModelIntegrationTest extends 
OllamaPreparationUtils {
     }
 
     @ParameterizedTest()
-    @ValueSource(
-            strings = {
-                "ANTHROPIC",
-                "AZURE",
-                "AZURE_OPENAI",
-                "OLLAMA",
-                "OPENAI",
-                "OPENAI_RESPONSES"
-            })
+    @ValueSource(strings = {"ANTHROPIC", "AZURE_OPENAI", "OLLAMA", "OPENAI", 
"OPENAI_RESPONSES"})
     public void testChatModeIntegration(String provider) throws Exception {
         Assumptions.assumeTrue(
                 (OLLAMA.equals(provider) && ollamaReady)
diff --git a/ide-support/pom.xml b/ide-support/pom.xml
index 503641ba..5ce239a9 100644
--- a/ide-support/pom.xml
+++ b/ide-support/pom.xml
@@ -79,17 +79,6 @@ under the License.
                 </exclusion>
             </exclusions>
         </dependency>
-        <dependency>
-            <groupId>org.apache.flink</groupId>
-            
<artifactId>flink-agents-integrations-chat-models-azureai</artifactId>
-            <version>${project.version}</version>
-            <exclusions>
-                <exclusion>
-                    <groupId>org.apache.flink</groupId>
-                    <artifactId>flink-agents-api</artifactId>
-                </exclusion>
-            </exclusions>
-        </dependency>
         <dependency>
             <groupId>org.apache.flink</groupId>
             
<artifactId>flink-agents-integrations-embedding-models-ollama</artifactId>
diff --git a/integrations/chat-models/azureai/pom.xml 
b/integrations/chat-models/azureai/pom.xml
deleted file mode 100644
index 4b9b4492..00000000
--- a/integrations/chat-models/azureai/pom.xml
+++ /dev/null
@@ -1,54 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF 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.
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0";
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/xsd/maven-4.0.0.xsd";>
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache.flink</groupId>
-        <artifactId>flink-agents-integrations-chat-models</artifactId>
-        <version>0.4-SNAPSHOT</version>
-        <relativePath>../pom.xml</relativePath>
-    </parent>
-
-    <artifactId>flink-agents-integrations-chat-models-azureai</artifactId>
-    <name>Flink Agents : Integrations: Chat Models: Azure AI</name>
-    <packaging>jar</packaging>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.apache.flink</groupId>
-            <artifactId>flink-agents-api</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-
-        <dependency>
-            <groupId>com.azure</groupId>
-            <artifactId>azure-ai-inference</artifactId>
-            <version>1.0.0-beta.5</version>
-        </dependency>
-
-        <dependency>
-            <groupId>com.azure</groupId>
-            <artifactId>azure-identity</artifactId>
-            <version>1.13.3</version>
-        </dependency>
-    </dependencies>
-
-</project>
\ No newline at end of file
diff --git 
a/integrations/chat-models/azureai/src/main/java/org/apache/flink/agents/integrations/chatmodels/azureai/AzureAIChatModelConnection.java
 
b/integrations/chat-models/azureai/src/main/java/org/apache/flink/agents/integrations/chatmodels/azureai/AzureAIChatModelConnection.java
deleted file mode 100644
index 4a239179..00000000
--- 
a/integrations/chat-models/azureai/src/main/java/org/apache/flink/agents/integrations/chatmodels/azureai/AzureAIChatModelConnection.java
+++ /dev/null
@@ -1,234 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF 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.
- */
-package org.apache.flink.agents.integrations.chatmodels.azureai;
-
-import com.azure.ai.inference.ChatCompletionsClient;
-import com.azure.ai.inference.ChatCompletionsClientBuilder;
-import com.azure.ai.inference.models.*;
-import com.azure.core.credential.AzureKeyCredential;
-import com.azure.core.util.BinaryData;
-import com.fasterxml.jackson.core.type.TypeReference;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.nimbusds.jose.shaded.gson.Gson;
-import org.apache.flink.agents.api.chat.messages.ChatMessage;
-import org.apache.flink.agents.api.chat.messages.MessageRole;
-import org.apache.flink.agents.api.chat.model.BaseChatModelConnection;
-import org.apache.flink.agents.api.resource.ResourceContext;
-import org.apache.flink.agents.api.resource.ResourceDescriptor;
-import org.apache.flink.agents.api.tools.Tool;
-
-import java.util.*;
-import java.util.stream.Collectors;
-
-/**
- * A chat model integration for Azure AI Chat Completions service.
- *
- * <p>This implementation adapts the generic Flink Agents chat model interface 
to the Azure AI Chat
- * Completions API.
- *
- * <p>See also {@link BaseChatModelConnection} for the common resource 
abstractions and lifecycle.
- *
- * <p>Example usage:
- *
- * <pre>{@code
- * public class MyAgent extends Agent {
- *   // Register the chat model connection via @ChatModelConnection metadata.
- *   @ChatModelConnection
- *   public static ResourceDesc azureAI() {
- *     return 
ResourceDescriptor.Builder.newBuilder(AzureAIChatModelConnection.class.getName())
- *        .addInitialArgument("endpoint", "<your-azure-ai-endpoint>")
- *        .addInitialArgument("apiKey", "<your-azure-ai-api-key>")
- *        .build();
- *   }
- * }
- * }</pre>
- */
-public class AzureAIChatModelConnection extends BaseChatModelConnection {
-
-    private final Gson gson = new Gson();
-
-    private final ChatCompletionsClient client;
-
-    /**
-     * Creates a new AzureAI chat model connection.
-     *
-     * @param descriptor a resource descriptor contains the initial parameters
-     * @param getResource a function to resolve resources (e.g., tools) by 
name and type
-     * @throws IllegalArgumentException if endpoint is null or empty
-     */
-    public AzureAIChatModelConnection(
-            ResourceDescriptor descriptor, ResourceContext resourceContext) {
-        super(descriptor, resourceContext);
-
-        String endpoint = descriptor.getArgument("endpoint");
-        String apiKey = descriptor.getArgument("apiKey");
-        if (endpoint == null || endpoint.isEmpty()) {
-            throw new IllegalArgumentException("endpoint should not be null or 
empty.");
-        }
-        this.client =
-                new ChatCompletionsClientBuilder()
-                        .credential(new AzureKeyCredential(apiKey))
-                        .endpoint(endpoint)
-                        .buildClient();
-    }
-
-    private List<ChatCompletionsToolDefinition> 
convertToAzureAITools(List<Tool> tools) {
-        final ObjectMapper mapper = new ObjectMapper();
-        final List<ChatCompletionsToolDefinition> azureAITools = new 
ArrayList<>();
-        try {
-            for (Tool tool : tools) {
-                final Map<String, Object> schema =
-                        mapper.readValue(
-                                tool.getMetadata().getInputSchema(), new 
TypeReference<>() {});
-
-                final FunctionDefinition functionDef =
-                        new FunctionDefinition(tool.getName())
-                                .setDescription(tool.getDescription())
-                                .setParameters(BinaryData.fromObject(schema));
-
-                azureAITools.add(new 
ChatCompletionsFunctionToolDefinition(functionDef));
-            }
-            return azureAITools;
-        } catch (Exception e) {
-            throw new RuntimeException(e);
-        }
-    }
-
-    private ChatRequestMessage convertToChatRequestMessage(ChatMessage 
message) {
-        final String content = message.getContent();
-        final MessageRole role = message.getRole();
-        final List<Map<String, Object>> toolCalls = message.getToolCalls();
-        final Map<String, Object> extraArgs = message.getExtraArgs();
-        switch (role) {
-            case SYSTEM:
-                return new ChatRequestSystemMessage(content);
-            case USER:
-                return new ChatRequestUserMessage(content);
-            case ASSISTANT:
-                final List<ChatCompletionsToolCall> azureToolCalls =
-                        toolCalls != null
-                                ? transformToAzureToolCalls(toolCalls)
-                                : Collections.emptyList();
-                return new 
ChatRequestAssistantMessage(content).setToolCalls(azureToolCalls);
-            case TOOL:
-                String toolCallId =
-                        extraArgs != null && 
extraArgs.containsKey("externalId")
-                                ? extraArgs.get("externalId").toString()
-                                : null;
-                return new 
ChatRequestToolMessage(toolCallId).setContent(content);
-            default:
-                throw new IllegalArgumentException("Unsupported role: " + 
role);
-        }
-    }
-
-    // the structure of toolCalls should be like the returned value of 
Method:convertToAgentsTools
-    private List<ChatCompletionsToolCall> transformToAzureToolCalls(
-            List<Map<String, Object>> toolCalls) {
-        final List<ChatCompletionsToolCall> azureToolCalls = new ArrayList<>();
-        for (Map<String, Object> call : toolCalls) {
-            final String id = (String) call.get("id");
-            final String type = (String) call.get("type");
-
-            if ("function".equals(type)) {
-                final Map<String, Object> functionCall = (Map<String, Object>) 
call.get("function");
-                final String functionName = (String) functionCall.get("name");
-                final Map<String, Object> functionArguments =
-                        (Map<String, Object>) functionCall.get("arguments");
-                final String functionArgumentsJson = 
gson.toJson(functionArguments);
-                ChatCompletionsFunctionToolCall function =
-                        new ChatCompletionsFunctionToolCall(
-                                id, new FunctionCall(functionName, 
functionArgumentsJson));
-                azureToolCalls.add(function);
-            }
-        }
-        return azureToolCalls;
-    }
-
-    @Override
-    public ChatMessage chat(
-            List<ChatMessage> messages, List<Tool> tools, Map<String, Object> 
modelParams) {
-        try {
-            final List<ChatCompletionsToolDefinition> azureTools = 
convertToAzureAITools(tools);
-            final List<ChatRequestMessage> chatMessages =
-                    messages.stream()
-                            .map(this::convertToChatRequestMessage)
-                            .collect(Collectors.toList());
-
-            final String modelName = (String) modelParams.get("model");
-            ChatCompletionsOptions options =
-                    new ChatCompletionsOptions(chatMessages)
-                            .setModel(modelName)
-                            .setTools(azureTools);
-
-            ChatCompletions completions = client.complete(options);
-            ChatChoice choice = completions.getChoices().get(0);
-            ChatResponseMessage responseMessage = choice.getMessage();
-
-            ChatMessage chatMessage = 
ChatMessage.assistant(responseMessage.getContent());
-
-            List<ChatCompletionsToolCall> toolCalls = 
responseMessage.getToolCalls();
-            if (toolCalls != null && !toolCalls.isEmpty()) {
-                List<Map<String, Object>> convertedToolCalls = 
convertToAgentsTools(toolCalls);
-                chatMessage.setToolCalls(convertedToolCalls);
-            }
-
-            // Stash token usage if model name is available
-            if (modelName != null && !modelName.isBlank()) {
-                CompletionsUsage usage = completions.getUsage();
-                if (usage != null) {
-                    chatMessage.getExtraArgs().put("model_name", modelName);
-                    chatMessage.getExtraArgs().put("promptTokens", (long) 
usage.getPromptTokens());
-                    chatMessage
-                            .getExtraArgs()
-                            .put("completionTokens", (long) 
usage.getCompletionTokens());
-                }
-            }
-
-            return chatMessage;
-        } catch (Exception e) {
-            throw new RuntimeException(e);
-        }
-    }
-
-    private List<Map<String, Object>> convertToAgentsTools(
-            List<ChatCompletionsToolCall> azureToolCalls) {
-        final List<Map<String, Object>> toolCalls = new 
ArrayList<>(azureToolCalls.size());
-        for (ChatCompletionsToolCall toolCall : azureToolCalls) {
-            if (toolCall != null) {
-                final Map<String, Object> call =
-                        Map.of(
-                                // todo: I don't think the magic name is a 
good idea here, need to
-                                // unify later (maybe we can consider 
standardizing tool call
-                                // structure across different LLM integrations)
-                                "id", toolCall.getId(),
-                                "original_id", toolCall.getId(),
-                                "type", toolCall.getType(),
-                                "function",
-                                        Map.of(
-                                                "name", 
toolCall.getFunction().getName(),
-                                                "arguments",
-                                                        gson.fromJson(
-                                                                
toolCall.getFunction()
-                                                                        
.getArguments(),
-                                                                Map.class)));
-                toolCalls.add(call);
-            }
-        }
-        return toolCalls;
-    }
-}
diff --git 
a/integrations/chat-models/azureai/src/main/java/org/apache/flink/agents/integrations/chatmodels/azureai/AzureAIChatModelSetup.java
 
b/integrations/chat-models/azureai/src/main/java/org/apache/flink/agents/integrations/chatmodels/azureai/AzureAIChatModelSetup.java
deleted file mode 100644
index 84b0fb61..00000000
--- 
a/integrations/chat-models/azureai/src/main/java/org/apache/flink/agents/integrations/chatmodels/azureai/AzureAIChatModelSetup.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF 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.
- */
-package org.apache.flink.agents.integrations.chatmodels.azureai;
-
-import org.apache.flink.agents.api.chat.model.BaseChatModelSetup;
-import org.apache.flink.agents.api.resource.ResourceDescriptor;
-
-/**
- * A chat model integration for Azure AI Chat Completions service.
- *
- * <p>This implementation adapts the generic Flink Agents chat model interface 
to the Azure AI Chat
- * Completions API.
- *
- * <p>See also {@link BaseChatModelSetup} for the common resource abstractions 
and lifecycle.
- *
- * <p>Example usage:
- *
- * <pre>{@code
- * public class MyAgent extends Agent {
- *   // Register the chat model setup via @ChatModelSetup metadata.
- *   @ChatModelSetup
- *   public static ResourceDesc azureAI() {
- *     return 
ResourceDescriptor.Builder.newBuilder(AzureAIChatModelSetup.class.getName())
- *             .addInitialArgument("model", "<your-azure-ai-model-name>")
- *             .addInitialArgument("prompt", "<your-prompt-template>")
- *             .addInitialArgument("tools", "<your-tool-list>")
- *             .addInitialArgument("key", "<your-azure-ai-key>")
- *             .addInitialArgument("endpoint", "<your-azure-ai-endpoint>")
- *             .build();
- *   }
- * }
- * }</pre>
- */
-public class AzureAIChatModelSetup extends BaseChatModelSetup {
-
-    public AzureAIChatModelSetup(
-            ResourceDescriptor descriptor,
-            org.apache.flink.agents.api.resource.ResourceContext 
resourceContext) {
-        super(descriptor, resourceContext);
-    }
-
-    // For any other specific parameters, please refer to 
ChatCompletionsOptions
-    @Override
-    public java.util.Map<String, Object> getParameters() {
-        java.util.Map<String, Object> params = new java.util.HashMap<>();
-        params.put("model", model);
-        return params;
-    }
-}
diff --git a/integrations/chat-models/pom.xml b/integrations/chat-models/pom.xml
index 53a8bcd2..d83457ae 100644
--- a/integrations/chat-models/pom.xml
+++ b/integrations/chat-models/pom.xml
@@ -32,7 +32,6 @@ under the License.
 
     <modules>
         <module>anthropic</module>
-        <module>azureai</module>
         <module>bedrock</module>
         <module>gemini</module>
         <module>ollama</module>
diff --git a/python/flink_agents/api/resource.py 
b/python/flink_agents/api/resource.py
index b945c9ad..7187d3d6 100644
--- a/python/flink_agents/api/resource.py
+++ b/python/flink_agents/api/resource.py
@@ -276,10 +276,6 @@ class ResourceName:
             ANTHROPIC_CONNECTION = 
"org.apache.flink.agents.integrations.chatmodels.anthropic.AnthropicChatModelConnection"
             ANTHROPIC_SETUP = 
"org.apache.flink.agents.integrations.chatmodels.anthropic.AnthropicChatModelSetup"
 
-            # Azure
-            AZURE_CONNECTION = 
"org.apache.flink.agents.integrations.chatmodels.azureai.AzureAIChatModelConnection"
-            AZURE_SETUP = 
"org.apache.flink.agents.integrations.chatmodels.azureai.AzureAIChatModelSetup"
-
             # Bedrock
             BEDROCK_CONNECTION = 
"org.apache.flink.agents.integrations.chatmodels.bedrock.BedrockChatModelConnection"
             BEDROCK_SETUP = 
"org.apache.flink.agents.integrations.chatmodels.bedrock.BedrockChatModelSetup"
diff --git a/python/flink_agents/api/yaml/aliases.py 
b/python/flink_agents/api/yaml/aliases.py
index 2f8da7d1..65dd5fe1 100644
--- a/python/flink_agents/api/yaml/aliases.py
+++ b/python/flink_agents/api/yaml/aliases.py
@@ -75,7 +75,6 @@ CLAZZ_ALIASES: Dict[ResourceType, Dict[str, Dict[str, str]]] 
= {
             "anthropic": ResourceName.ChatModel.Java.ANTHROPIC_CONNECTION,
             "gemini": ResourceName.ChatModel.Java.GEMINI_CONNECTION,
             "azure_openai": 
ResourceName.ChatModel.Java.AZURE_OPENAI_CONNECTION,
-            "azure": ResourceName.ChatModel.Java.AZURE_CONNECTION,
             "bedrock": ResourceName.ChatModel.Java.BEDROCK_CONNECTION,
             "vllm": ResourceName.ChatModel.Java.VLLM_CONNECTION,
         },
@@ -96,7 +95,6 @@ CLAZZ_ALIASES: Dict[ResourceType, Dict[str, Dict[str, str]]] 
= {
             "anthropic": ResourceName.ChatModel.Java.ANTHROPIC_SETUP,
             "gemini": ResourceName.ChatModel.Java.GEMINI_SETUP,
             "azure_openai": ResourceName.ChatModel.Java.AZURE_OPENAI_SETUP,
-            "azure": ResourceName.ChatModel.Java.AZURE_SETUP,
             "bedrock": ResourceName.ChatModel.Java.BEDROCK_SETUP,
             "vllm": ResourceName.ChatModel.Java.VLLM_SETUP,
         },

Reply via email to