You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airflow.apache.org by gi...@apache.org on 2026/04/14 01:33:13 UTC

(airflow-site) branch publish updated: Docs updated via refs/heads/main:a07708f6d0bbf82d139f104f7b2204970612b5ef

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

github-bot pushed a commit to branch publish
in repository https://gitbox.apache.org/repos/asf/airflow-site.git


The following commit(s) were added to refs/heads/publish by this push:
     new 9431e3d790 Docs updated via refs/heads/main:a07708f6d0bbf82d139f104f7b2204970612b5ef
9431e3d790 is described below

commit 9431e3d790a0f3294fc3666f7c7157ce2be6544d
Author: GitHub Actions <ac...@users.noreply.github.com>
AuthorDate: Tue Apr 14 01:33:07 2026 +0000

    Docs updated via refs/heads/main:a07708f6d0bbf82d139f104f7b2204970612b5ef
---
 _gen/indexes/en/blog-index.json                    |   2 +-
 _gen/indexes/en/blog-posts.json                    |   2 +-
 announcements/index.html                           |   2 +-
 blocktype/index.html                               |   2 +-
 blocktype/testimonial/index.html                   |   2 +-
 blocktype/use-case/index.html                      |   2 +-
 blog/airflow-1.10.10/index.html                    |   4 +-
 blog/airflow-1.10.12/index.html                    |   4 +-
 blog/airflow-1.10.8-1.10.9/index.html              |   4 +-
 blog/airflow-2.10.0/index.html                     |  45 +-
 blog/airflow-2.2.0/index.html                      |   4 +-
 blog/airflow-2.3.0/index.html                      |  33 +-
 blog/airflow-2.4.0/index.html                      |   4 +-
 blog/airflow-2.5.0/index.html                      |   4 +-
 blog/airflow-2.6.0/index.html                      |   4 +-
 blog/airflow-2.7.0/index.html                      |   4 +-
 blog/airflow-2.8.0/index.html                      |  33 +-
 blog/airflow-2.9.0/index.html                      |   4 +-
 blog/airflow-3.1.0/index.html                      |  58 +-
 blog/airflow-3.2.0/index.html                      |  60 ++-
 blog/airflow-registry/index.html                   |  43 +-
 blog/airflow-survey-2020/index.html                |   4 +-
 blog/airflow-survey-2022/index.html                |   4 +-
 blog/airflow-survey-2023/index.html                |   4 +-
 blog/airflow-survey-2024/index.html                |   4 +-
 blog/airflow-survey-2025/index.html                |   4 +-
 blog/airflow-survey/index.html                     |   4 +-
 blog/airflow-three-point-oh-is-here/index.html     |  45 +-
 blog/airflow-two-point-oh-is-here/index.html       |   4 +-
 blog/airflow_summit_2021/index.html                |  33 +-
 blog/airflow_summit_2022/index.html                |  33 +-
 blog/airflowctl-0.1.0/index.html                   |   4 +-
 blog/announcing-new-website/index.html             |  49 +-
 blog/apache-airflow-for-newcomers/index.html       |  49 +-
 .../index.html                                     |  49 +-
 blog/common-ai-provider/images/agent-sql-logs.png  | Bin 0 -> 512969 bytes
 .../images/common-ai-provider.png                  | Bin 0 -> 304171 bytes
 .../images/durable-attempt-1.png                   | Bin 0 -> 912104 bytes
 .../images/durable-attempt-2.png                   | Bin 0 -> 688474 bytes
 blog/common-ai-provider/images/durable-summary.png | Bin 0 -> 122476 bytes
 .../images/file-analysis-csv.png                   | Bin 0 -> 476057 bytes
 blog/common-ai-provider/images/hitl-approval.png   | Bin 0 -> 319894 bytes
 blog/common-ai-provider/images/hitl-review-tab.gif | Bin 0 -> 2121464 bytes
 blog/common-ai-provider/images/tool-logging.png    | Bin 0 -> 642712 bytes
 .../index.html                                     | 598 ++++++++++++---------
 .../index.html                                     |   4 +-
 .../index.html                                     |   4 +-
 .../index.html                                     |  49 +-
 blog/fab-oid-vulnerability/index.html              |   4 +-
 .../index.html                                     |   4 +-
 blog/index.html                                    |  56 +-
 blog/index.xml                                     | 384 +++++++++++--
 blog/introducing_setup_teardown/index.html         |   4 +-
 .../index.html                                     |   4 +-
 blog/tags/airflow-summit/index.html                |   2 +-
 blog/tags/airflow-summit/index.xml                 |   2 +-
 blog/tags/community/index.html                     |  58 +-
 blog/tags/community/index.xml                      |   9 +-
 blog/tags/development/index.html                   |   2 +-
 blog/tags/development/index.xml                    |   2 +-
 blog/tags/documentation/index.html                 |   2 +-
 blog/tags/documentation/index.xml                  |   2 +-
 blog/tags/release/index.html                       |  58 +-
 blog/tags/release/index.xml                        |   9 +-
 blog/tags/rest-api/index.html                      |   2 +-
 blog/tags/rest-api/index.xml                       |   2 +-
 blog/tags/survey/index.html                        |   2 +-
 blog/tags/survey/index.xml                         |   2 +-
 blog/tags/users/index.html                         |   2 +-
 blog/tags/users/index.xml                          |   2 +-
 blog/tags/vulnerabilities/index.html               |   2 +-
 blog/tags/vulnerabilities/index.xml                |   2 +-
 code-of-conduct/index.html                         |   2 +-
 community/index.html                               |   2 +-
 community/resources/index.html                     |   4 +-
 docs/index.html                                    |   2 +-
 ecosystem/index.html                               |   2 +-
 index.html                                         |  27 +-
 index.xml                                          |   7 +
 meetups/index.html                                 |   2 +-
 privacy-notice/index.html                          |   2 +-
 roadmap/index.html                                 |   2 +-
 search/index.html                                  |   4 +-
 sitemap.xml                                        | 165 +++---
 survey/index.html                                  |   2 +-
 tags/index.html                                    |   8 +-
 tags/index.xml                                     |  18 +-
 use-cases/adjoe/index.html                         |   4 +-
 use-cases/adobe/index.html                         |   4 +-
 use-cases/adyen/index.html                         |   4 +-
 use-cases/big-fish-games/index.html                |   4 +-
 use-cases/business_operations/index.html           |   4 +-
 use-cases/dish/index.html                          |   4 +-
 use-cases/etl_analytics/index.html                 |   4 +-
 use-cases/experity/index.html                      |   4 +-
 use-cases/index.html                               |   2 +-
 use-cases/infrastructure-management/index.html     |   4 +-
 use-cases/mlops/index.html                         |   4 +-
 use-cases/onefootball/index.html                   |   4 +-
 use-cases/plarium-krasnodar/index.html             |   4 +-
 use-cases/seniorlink/index.html                    |   4 +-
 use-cases/sift/index.html                          |   4 +-
 use-cases/snapp/index.html                         |   4 +-
 use-cases/suse/index.html                          |   4 +-
 104 files changed, 1487 insertions(+), 711 deletions(-)

diff --git a/_gen/indexes/en/blog-index.json b/_gen/indexes/en/blog-index.json
index fe4f67d9df..369a0498e4 100644
--- a/_gen/indexes/en/blog-index.json
+++ b/_gen/indexes/en/blog-index.json
@@ -1 +1 @@
-{"version":"2.3.9","fields":["title","description","author","content","tags","url"],"fieldVectors":[["title/It's a \"Breeze\" to develop Apache Airflow",[0,1.538,1,1.673,2,0.585,3,0.405,4,0.507]],["description/It's a \"Breeze\" to develop Apache Airflow",[2,0.751,4,0.45,5,2.72,6,1.626,7,2.72,8,1.795,9,1.626,10,1.26,11,1.365,12,0.936,13,2.72,14,0.936,15,2.72,16,0.057]],["author/It's a \"Breeze\" to develop Apache Airflow",[11,1.632,17,1.775]],["content/It's a \"Breeze\" to develop Apache  [...]
\ No newline at end of file
+{"version":"2.3.9","fields":["title","description","author","content","tags","url"],"fieldVectors":[["title/It's a \"Breeze\" to develop Apache Airflow",[0,1.465,1,1.723,2,0.618,3,0.414,4,0.513]],["description/It's a \"Breeze\" to develop Apache Airflow",[2,0.789,4,0.454,5,2.772,6,1.667,7,2.772,8,1.837,9,1.667,10,1.296,11,1.403,12,0.968,13,2.772,14,0.968,15,2.772,16,0.056]],["author/It's a \"Breeze\" to develop Apache Airflow",[11,1.64,17,1.782]],["content/It's a \"Breeze\" to develop Ap [...]
\ No newline at end of file
diff --git a/_gen/indexes/en/blog-posts.json b/_gen/indexes/en/blog-posts.json
index 750850a7e1..42f0a3441b 100644
--- a/_gen/indexes/en/blog-posts.json
+++ b/_gen/indexes/en/blog-posts.json
@@ -1 +1 @@
-[{"content":"## The story behind the Airflow Breeze tool\nInitially, we started contributing to this fantastic open-source project [Apache Airflow] with a team of three which then grew to five. When we kicked it off a year ago, I realized pretty soon where the biggest bottlenecks and areas for improvement in terms of productivity were. Even with the help of our client, who provided us with a “homegrown” development environment it took us literally days to set it up and learn some basics. [...]
\ No newline at end of file
+[{"content":"## The story behind the Airflow Breeze tool\nInitially, we started contributing to this fantastic open-source project [Apache Airflow] with a team of three which then grew to five. When we kicked it off a year ago, I realized pretty soon where the biggest bottlenecks and areas for improvement in terms of productivity were. Even with the help of our client, who provided us with a “homegrown” development environment it took us literally days to set it up and learn some basics. [...]
\ No newline at end of file
diff --git a/announcements/index.html b/announcements/index.html
index a290d2f314..322e9615ed 100644
--- a/announcements/index.html
+++ b/announcements/index.html
@@ -47,7 +47,7 @@ March 14, 2026 We’ve just released Apache Airflow 2.11.2 🎉
 📦 PyPI: https://pypi.org/project/apache-airflow/2.11.2/ 📚 Docs: https://airflow.apache.org/docs/apache-airflow/2.11.2/ 🛠 Release Notes: https://airflow.apache.org/docs/apache-airflow/2.11.2/release_notes.html 🐳 Docker Image: “docker pull apache/airflow:2.11.2” 🚏 Constraints: https://github.com/apache/airflow/tree/constraints-2.11.2
 March 11, 2026 We’ve just released Apache Airflow 3.1.8 🎉">
   <meta itemprop="datePublished" content="2020-08-08T05:30:20+05:30">
-  <meta itemprop="dateModified" content="2026-04-14T02:24:09+02:00">
+  <meta itemprop="dateModified" content="2026-04-14T02:30:35+01:00">
   <meta itemprop="wordCount" content="6001">
   <meta itemprop="image" content="/images/feature-image.png">
 
diff --git a/blocktype/index.html b/blocktype/index.html
index 0a2946a622..c5fe47bd22 100644
--- a/blocktype/index.html
+++ b/blocktype/index.html
@@ -34,7 +34,7 @@
 
   <meta itemprop="name" content="Blocktype">
   <meta itemprop="description" content="Platform created by the community to programmatically author, schedule and monitor workflows.">
-  <meta itemprop="dateModified" content="2026-04-14T02:24:09+02:00">
+  <meta itemprop="dateModified" content="2026-04-14T02:30:35+01:00">
   <meta itemprop="image" content="/images/feature-image.png">
 
 
diff --git a/blocktype/testimonial/index.html b/blocktype/testimonial/index.html
index 40b25117e4..d0ac413935 100644
--- a/blocktype/testimonial/index.html
+++ b/blocktype/testimonial/index.html
@@ -34,7 +34,7 @@
 
   <meta itemprop="name" content="Testimonial">
   <meta itemprop="description" content="Platform created by the community to programmatically author, schedule and monitor workflows.">
-  <meta itemprop="dateModified" content="2026-04-14T02:24:09+02:00">
+  <meta itemprop="dateModified" content="2026-04-14T02:30:35+01:00">
   <meta itemprop="image" content="/images/feature-image.png">
 
 
diff --git a/blocktype/use-case/index.html b/blocktype/use-case/index.html
index c9cd07df3c..0b07530602 100644
--- a/blocktype/use-case/index.html
+++ b/blocktype/use-case/index.html
@@ -34,7 +34,7 @@
 
   <meta itemprop="name" content="Use-Case">
   <meta itemprop="description" content="Platform created by the community to programmatically author, schedule and monitor workflows.">
-  <meta itemprop="dateModified" content="2026-04-14T02:24:09+02:00">
+  <meta itemprop="dateModified" content="2026-04-14T02:30:35+01:00">
   <meta itemprop="image" content="/images/feature-image.png">
 
 
diff --git a/blog/airflow-1.10.10/index.html b/blog/airflow-1.10.10/index.html
index 2b8ee5cee4..924df18fc5 100644
--- a/blog/airflow-1.10.10/index.html
+++ b/blog/airflow-1.10.10/index.html
@@ -31,14 +31,14 @@
   <meta property="og:type" content="article">
     <meta property="article:section" content="blog">
     <meta property="article:published_time" content="2020-04-09T00:00:00+00:00">
-    <meta property="article:modified_time" content="2026-04-14T02:24:09+02:00">
+    <meta property="article:modified_time" content="2026-04-14T02:30:35+01:00">
     <meta property="article:tag" content="Release">
     <meta property="og:image" content="/images/feature-image.png">
 
   <meta itemprop="name" content="Apache Airflow 1.10.10">
   <meta itemprop="description" content="We are happy to present Apache Airflow 1.10.10">
   <meta itemprop="datePublished" content="2020-04-09T00:00:00+00:00">
-  <meta itemprop="dateModified" content="2026-04-14T02:24:09+02:00">
+  <meta itemprop="dateModified" content="2026-04-14T02:30:35+01:00">
   <meta itemprop="wordCount" content="1142">
   <meta itemprop="image" content="/images/feature-image.png">
   <meta itemprop="keywords" content="Release">
diff --git a/blog/airflow-1.10.12/index.html b/blog/airflow-1.10.12/index.html
index d751bbacb7..7ab7bbe1ca 100644
--- a/blog/airflow-1.10.12/index.html
+++ b/blog/airflow-1.10.12/index.html
@@ -31,14 +31,14 @@
   <meta property="og:type" content="article">
     <meta property="article:section" content="blog">
     <meta property="article:published_time" content="2020-08-25T00:00:00+00:00">
-    <meta property="article:modified_time" content="2026-04-14T02:24:09+02:00">
+    <meta property="article:modified_time" content="2026-04-14T02:30:35+01:00">
     <meta property="article:tag" content="Release">
     <meta property="og:image" content="/images/feature-image.png">
 
   <meta itemprop="name" content="Apache Airflow 1.10.12">
   <meta itemprop="description" content="We are happy to present Apache Airflow 1.10.12">
   <meta itemprop="datePublished" content="2020-08-25T00:00:00+00:00">
-  <meta itemprop="dateModified" content="2026-04-14T02:24:09+02:00">
+  <meta itemprop="dateModified" content="2026-04-14T02:30:35+01:00">
   <meta itemprop="wordCount" content="910">
   <meta itemprop="image" content="/images/feature-image.png">
   <meta itemprop="keywords" content="Release">
diff --git a/blog/airflow-1.10.8-1.10.9/index.html b/blog/airflow-1.10.8-1.10.9/index.html
index 87b08a400a..1bc71ef555 100644
--- a/blog/airflow-1.10.8-1.10.9/index.html
+++ b/blog/airflow-1.10.8-1.10.9/index.html
@@ -31,14 +31,14 @@
   <meta property="og:type" content="article">
     <meta property="article:section" content="blog">
     <meta property="article:published_time" content="2020-02-23T00:00:00+00:00">
-    <meta property="article:modified_time" content="2026-04-14T02:24:09+02:00">
+    <meta property="article:modified_time" content="2026-04-14T02:30:35+01:00">
     <meta property="article:tag" content="Release">
     <meta property="og:image" content="/images/feature-image.png">
 
   <meta itemprop="name" content="Apache Airflow 1.10.8 & 1.10.9">
   <meta itemprop="description" content="We are happy to present the new 1.10.8 and 1.10.9 releases of Apache Airflow.">
   <meta itemprop="datePublished" content="2020-02-23T00:00:00+00:00">
-  <meta itemprop="dateModified" content="2026-04-14T02:24:09+02:00">
+  <meta itemprop="dateModified" content="2026-04-14T02:30:35+01:00">
   <meta itemprop="wordCount" content="437">
   <meta itemprop="image" content="/images/feature-image.png">
   <meta itemprop="keywords" content="Release">
diff --git a/blog/airflow-2.10.0/index.html b/blog/airflow-2.10.0/index.html
index ef8d4b9806..c2b4edbacc 100644
--- a/blog/airflow-2.10.0/index.html
+++ b/blog/airflow-2.10.0/index.html
@@ -31,14 +31,14 @@
   <meta property="og:type" content="article">
     <meta property="article:section" content="blog">
     <meta property="article:published_time" content="2024-08-08T00:00:00+00:00">
-    <meta property="article:modified_time" content="2026-04-14T02:24:09+02:00">
+    <meta property="article:modified_time" content="2026-04-14T02:30:35+01:00">
     <meta property="article:tag" content="Release">
     <meta property="og:image" content="/images/feature-image.png">
 
   <meta itemprop="name" content="Apache Airflow 2.10.0 is here">
   <meta itemprop="description" content="Apache Airflow 2.10.0 is a game-changer, with powerful Dataset improvements and the groundbreaking Hybrid Executor, set to redefine your workflow capabilities!">
   <meta itemprop="datePublished" content="2024-08-08T00:00:00+00:00">
-  <meta itemprop="dateModified" content="2026-04-14T02:24:09+02:00">
+  <meta itemprop="dateModified" content="2026-04-14T02:30:35+01:00">
   <meta itemprop="wordCount" content="1040">
   <meta itemprop="image" content="/images/feature-image.png">
   <meta itemprop="keywords" content="Release">
@@ -730,23 +730,40 @@ executor = &#39;LocalExecutor,KubernetesExecutor,my.custom.module.ExecutorClass:
             <div class="tags-container">
                 
                     
+                        <a class="tag" href="/blog/tags/community/">Community</a>
+                    
+                
+                    
                         <a class="tag" href="/blog/tags/release/">Release</a>
                     
                 
             </div>
-            <span class="bodytext__medium--brownish-grey box-event__blogpost--date">Tue, Apr 7, 2026</span>
+            <span class="bodytext__medium--brownish-grey box-event__blogpost--date">Tue, Apr 14, 2026</span>
         </div>
         <p class="box-event__blogpost--header">
-            <a href="/blog/airflow-3.2.0/">
-                Apache Airflow 3.2.0: Data-Aware Workflows at Scale
+            <a href="/blog/common-ai-provider/">
+                Introducing the Common AI Provider: LLM and AI Agent Support for Apache Airflow
             </a>
         </p>
         
-            <p class="box-event__blogpost--author">Rahul Vats</p>
+        <p class="box-event__blogpost--author">
+          
+          
+            
+              <a href="https://linkedin.com/in/kaxil" target="_blank" rel="noopener">Kaxil Naik</a>
+            
+            , 
+          
+            
+              <a href="https://linkedin.com/in/pavan-kumar-gopidesu" target="_blank" rel="noopener">Pavan Kumar Gopidesu</a>
+            
+            
+          
+        </p>
         
-        <p class="box-event__blogpost--description">Apache Airflow 3.2.0 introduces Asset partitioning for granular pipeline orchestration, multi-team deployments for enterprise scale, synchronous deadline alert callbacks, and continued progress toward full Task SDK separation.</p>
+        <p class="box-event__blogpost--description">The Common AI Provider adds LLM and AI agent operators to Apache Airflow with 6 operators, 5 toolsets, and 20&#43; model providers in one package.</p>
         <div class="mt-auto">
-            <a href="/blog/airflow-3.2.0/">
+            <a href="/blog/common-ai-provider/">
                 
 
 <button class="btn-hollow btn-blue bodytext__medium--cerulean-blue" >Read more</button>
@@ -771,19 +788,19 @@ executor = &#39;LocalExecutor,KubernetesExecutor,my.custom.module.ExecutorClass:
                     
                 
             </div>
-            <span class="bodytext__medium--brownish-grey box-event__blogpost--date">Thu, Sep 25, 2025</span>
+            <span class="bodytext__medium--brownish-grey box-event__blogpost--date">Tue, Apr 7, 2026</span>
         </div>
         <p class="box-event__blogpost--header">
-            <a href="/blog/airflow-3.1.0/">
-                Apache Airflow 3.1.0: Human-Centered Workflows
+            <a href="/blog/airflow-3.2.0/">
+                Apache Airflow 3.2.0: Data-Aware Workflows at Scale
             </a>
         </p>
         
-            <p class="box-event__blogpost--author">Kaxil Naik</p>
+            <p class="box-event__blogpost--author">Rahul Vats</p>
         
-        <p class="box-event__blogpost--description">Apache Airflow 3.1.0 introduces Human-in-the-Loop workflows, 17-language internationalization, deadline alerts, and React plugin system for data orchestration teams.</p>
+        <p class="box-event__blogpost--description">Apache Airflow 3.2.0 introduces Asset partitioning for granular pipeline orchestration, multi-team deployments for enterprise scale, synchronous deadline alert callbacks, and continued progress toward full Task SDK separation.</p>
         <div class="mt-auto">
-            <a href="/blog/airflow-3.1.0/">
+            <a href="/blog/airflow-3.2.0/">
                 
 
 <button class="btn-hollow btn-blue bodytext__medium--cerulean-blue" >Read more</button>
diff --git a/blog/airflow-2.2.0/index.html b/blog/airflow-2.2.0/index.html
index a387ce17a4..6ce7c5408e 100644
--- a/blog/airflow-2.2.0/index.html
+++ b/blog/airflow-2.2.0/index.html
@@ -31,14 +31,14 @@
   <meta property="og:type" content="article">
     <meta property="article:section" content="blog">
     <meta property="article:published_time" content="2021-10-11T00:00:00+00:00">
-    <meta property="article:modified_time" content="2026-04-14T02:24:09+02:00">
+    <meta property="article:modified_time" content="2026-04-14T02:30:35+01:00">
     <meta property="article:tag" content="Release">
     <meta property="og:image" content="/images/feature-image.png">
 
   <meta itemprop="name" content="What&#39;s new in Apache Airflow 2.2.0">
   <meta itemprop="description" content="We&#39;re proud to announce that Apache Airflow 2.2.0 has been released.">
   <meta itemprop="datePublished" content="2021-10-11T00:00:00+00:00">
-  <meta itemprop="dateModified" content="2026-04-14T02:24:09+02:00">
+  <meta itemprop="dateModified" content="2026-04-14T02:30:35+01:00">
   <meta itemprop="wordCount" content="658">
   <meta itemprop="image" content="/images/feature-image.png">
   <meta itemprop="keywords" content="Release">
diff --git a/blog/airflow-2.3.0/index.html b/blog/airflow-2.3.0/index.html
index 24969ea5a8..19b7e93cfc 100644
--- a/blog/airflow-2.3.0/index.html
+++ b/blog/airflow-2.3.0/index.html
@@ -31,14 +31,14 @@
   <meta property="og:type" content="article">
     <meta property="article:section" content="blog">
     <meta property="article:published_time" content="2022-04-30T00:00:00+00:00">
-    <meta property="article:modified_time" content="2026-04-14T02:24:09+02:00">
+    <meta property="article:modified_time" content="2026-04-14T02:30:35+01:00">
     <meta property="article:tag" content="Release">
     <meta property="og:image" content="/images/feature-image.png">
 
   <meta itemprop="name" content="Apache Airflow 2.3.0 is here">
   <meta itemprop="description" content="We&#39;re proud to announce that Apache Airflow 2.3.0 has been released.">
   <meta itemprop="datePublished" content="2022-04-30T00:00:00+00:00">
-  <meta itemprop="dateModified" content="2026-04-14T02:24:09+02:00">
+  <meta itemprop="dateModified" content="2026-04-14T02:30:35+01:00">
   <meta itemprop="wordCount" content="708">
   <meta itemprop="image" content="/images/feature-image.png">
   <meta itemprop="keywords" content="Release">
@@ -745,23 +745,40 @@ Sade&rsquo;s &ldquo;Smooth Operator&rdquo;. Enjoy!</li>
             <div class="tags-container">
                 
                     
+                        <a class="tag" href="/blog/tags/community/">Community</a>
+                    
+                
+                    
                         <a class="tag" href="/blog/tags/release/">Release</a>
                     
                 
             </div>
-            <span class="bodytext__medium--brownish-grey box-event__blogpost--date">Tue, Apr 7, 2026</span>
+            <span class="bodytext__medium--brownish-grey box-event__blogpost--date">Tue, Apr 14, 2026</span>
         </div>
         <p class="box-event__blogpost--header">
-            <a href="/blog/airflow-3.2.0/">
-                Apache Airflow 3.2.0: Data-Aware Workflows at Scale
+            <a href="/blog/common-ai-provider/">
+                Introducing the Common AI Provider: LLM and AI Agent Support for Apache Airflow
             </a>
         </p>
         
-            <p class="box-event__blogpost--author">Rahul Vats</p>
+        <p class="box-event__blogpost--author">
+          
+          
+            
+              <a href="https://linkedin.com/in/kaxil" target="_blank" rel="noopener">Kaxil Naik</a>
+            
+            , 
+          
+            
+              <a href="https://linkedin.com/in/pavan-kumar-gopidesu" target="_blank" rel="noopener">Pavan Kumar Gopidesu</a>
+            
+            
+          
+        </p>
         
-        <p class="box-event__blogpost--description">Apache Airflow 3.2.0 introduces Asset partitioning for granular pipeline orchestration, multi-team deployments for enterprise scale, synchronous deadline alert callbacks, and continued progress toward full Task SDK separation.</p>
+        <p class="box-event__blogpost--description">The Common AI Provider adds LLM and AI agent operators to Apache Airflow with 6 operators, 5 toolsets, and 20&#43; model providers in one package.</p>
         <div class="mt-auto">
-            <a href="/blog/airflow-3.2.0/">
+            <a href="/blog/common-ai-provider/">
                 
 
 <button class="btn-hollow btn-blue bodytext__medium--cerulean-blue" >Read more</button>
diff --git a/blog/airflow-2.4.0/index.html b/blog/airflow-2.4.0/index.html
index 9f83654152..6b621b0f2d 100644
--- a/blog/airflow-2.4.0/index.html
+++ b/blog/airflow-2.4.0/index.html
@@ -31,14 +31,14 @@
   <meta property="og:type" content="article">
     <meta property="article:section" content="blog">
     <meta property="article:published_time" content="2022-09-19T00:00:00+00:00">
-    <meta property="article:modified_time" content="2026-04-14T02:24:09+02:00">
+    <meta property="article:modified_time" content="2026-04-14T02:30:35+01:00">
     <meta property="article:tag" content="Release">
     <meta property="og:image" content="/images/feature-image.png">
 
   <meta itemprop="name" content="Apache Airflow 2.4.0: That Data Aware Release">
   <meta itemprop="description" content="We&#39;re proud to announce that Apache Airflow 2.4.0 has been released with many exciting improvements.">
   <meta itemprop="datePublished" content="2022-09-19T00:00:00+00:00">
-  <meta itemprop="dateModified" content="2026-04-14T02:24:09+02:00">
+  <meta itemprop="dateModified" content="2026-04-14T02:30:35+01:00">
   <meta itemprop="wordCount" content="849">
   <meta itemprop="image" content="/images/feature-image.png">
   <meta itemprop="keywords" content="Release">
diff --git a/blog/airflow-2.5.0/index.html b/blog/airflow-2.5.0/index.html
index d1dcb2e2d0..7e08c4c0d6 100644
--- a/blog/airflow-2.5.0/index.html
+++ b/blog/airflow-2.5.0/index.html
@@ -31,14 +31,14 @@
   <meta property="og:type" content="article">
     <meta property="article:section" content="blog">
     <meta property="article:published_time" content="2022-12-02T00:00:00+00:00">
-    <meta property="article:modified_time" content="2026-04-14T02:24:09+02:00">
+    <meta property="article:modified_time" content="2026-04-14T02:30:35+01:00">
     <meta property="article:tag" content="Release">
     <meta property="og:image" content="/images/feature-image.png">
 
   <meta itemprop="name" content="Apache Airflow 2.5.0: Tick-Tock">
   <meta itemprop="description" content="We&#39;re proud to announce that Apache Airflow 2.5.0 has been released with many quality of life changes.">
   <meta itemprop="datePublished" content="2022-12-02T00:00:00+00:00">
-  <meta itemprop="dateModified" content="2026-04-14T02:24:09+02:00">
+  <meta itemprop="dateModified" content="2026-04-14T02:30:35+01:00">
   <meta itemprop="wordCount" content="391">
   <meta itemprop="image" content="/images/feature-image.png">
   <meta itemprop="keywords" content="Release">
diff --git a/blog/airflow-2.6.0/index.html b/blog/airflow-2.6.0/index.html
index 4ca8c26461..49524ee56a 100644
--- a/blog/airflow-2.6.0/index.html
+++ b/blog/airflow-2.6.0/index.html
@@ -31,14 +31,14 @@
   <meta property="og:type" content="article">
     <meta property="article:section" content="blog">
     <meta property="article:published_time" content="2023-04-30T00:00:00+00:00">
-    <meta property="article:modified_time" content="2026-04-14T02:24:09+02:00">
+    <meta property="article:modified_time" content="2026-04-14T02:30:35+01:00">
     <meta property="article:tag" content="Release">
     <meta property="og:image" content="/images/feature-image.png">
 
   <meta itemprop="name" content="what&#39;s new in Apache Airflow 2.6.0">
   <meta itemprop="description" content="Apache Airflow 2.6.0 has been released!">
   <meta itemprop="datePublished" content="2023-04-30T00:00:00+00:00">
-  <meta itemprop="dateModified" content="2026-04-14T02:24:09+02:00">
+  <meta itemprop="dateModified" content="2026-04-14T02:30:35+01:00">
   <meta itemprop="wordCount" content="535">
   <meta itemprop="image" content="/images/feature-image.png">
   <meta itemprop="keywords" content="Release">
diff --git a/blog/airflow-2.7.0/index.html b/blog/airflow-2.7.0/index.html
index 26d80b903a..8b5a647706 100644
--- a/blog/airflow-2.7.0/index.html
+++ b/blog/airflow-2.7.0/index.html
@@ -31,14 +31,14 @@
   <meta property="og:type" content="article">
     <meta property="article:section" content="blog">
     <meta property="article:published_time" content="2023-08-18T00:00:00+00:00">
-    <meta property="article:modified_time" content="2026-04-14T02:24:09+02:00">
+    <meta property="article:modified_time" content="2026-04-14T02:30:35+01:00">
     <meta property="article:tag" content="Release">
     <meta property="og:image" content="/images/feature-image.png">
 
   <meta itemprop="name" content="Apache Airflow 2.7.0 is here">
   <meta itemprop="description" content="Apache Airflow 2.7.0 has been released!">
   <meta itemprop="datePublished" content="2023-08-18T00:00:00+00:00">
-  <meta itemprop="dateModified" content="2026-04-14T02:24:09+02:00">
+  <meta itemprop="dateModified" content="2026-04-14T02:30:35+01:00">
   <meta itemprop="wordCount" content="816">
   <meta itemprop="image" content="/images/feature-image.png">
   <meta itemprop="keywords" content="Release">
diff --git a/blog/airflow-2.8.0/index.html b/blog/airflow-2.8.0/index.html
index c20145a552..b6bb5cdf3d 100644
--- a/blog/airflow-2.8.0/index.html
+++ b/blog/airflow-2.8.0/index.html
@@ -31,14 +31,14 @@
   <meta property="og:type" content="article">
     <meta property="article:section" content="blog">
     <meta property="article:published_time" content="2023-12-15T00:00:00+00:00">
-    <meta property="article:modified_time" content="2026-04-14T02:24:09+02:00">
+    <meta property="article:modified_time" content="2026-04-14T02:30:35+01:00">
     <meta property="article:tag" content="Release">
     <meta property="og:image" content="/images/feature-image.png">
 
   <meta itemprop="name" content="Apache Airflow 2.8.0 is here">
   <meta itemprop="description" content="Introducing Apache Airflow 2.8.0: Enhanced with New Features and Significant Improvements">
   <meta itemprop="datePublished" content="2023-12-15T00:00:00+00:00">
-  <meta itemprop="dateModified" content="2026-04-14T02:24:09+02:00">
+  <meta itemprop="dateModified" content="2026-04-14T02:30:35+01:00">
   <meta itemprop="wordCount" content="730">
   <meta itemprop="image" content="/images/feature-image.png">
   <meta itemprop="keywords" content="Release">
@@ -724,23 +724,40 @@ We care for your security, and &ldquo;secure by default&rdquo; is one of the thi
             <div class="tags-container">
                 
                     
+                        <a class="tag" href="/blog/tags/community/">Community</a>
+                    
+                
+                    
                         <a class="tag" href="/blog/tags/release/">Release</a>
                     
                 
             </div>
-            <span class="bodytext__medium--brownish-grey box-event__blogpost--date">Tue, Apr 7, 2026</span>
+            <span class="bodytext__medium--brownish-grey box-event__blogpost--date">Tue, Apr 14, 2026</span>
         </div>
         <p class="box-event__blogpost--header">
-            <a href="/blog/airflow-3.2.0/">
-                Apache Airflow 3.2.0: Data-Aware Workflows at Scale
+            <a href="/blog/common-ai-provider/">
+                Introducing the Common AI Provider: LLM and AI Agent Support for Apache Airflow
             </a>
         </p>
         
-            <p class="box-event__blogpost--author">Rahul Vats</p>
+        <p class="box-event__blogpost--author">
+          
+          
+            
+              <a href="https://linkedin.com/in/kaxil" target="_blank" rel="noopener">Kaxil Naik</a>
+            
+            , 
+          
+            
+              <a href="https://linkedin.com/in/pavan-kumar-gopidesu" target="_blank" rel="noopener">Pavan Kumar Gopidesu</a>
+            
+            
+          
+        </p>
         
-        <p class="box-event__blogpost--description">Apache Airflow 3.2.0 introduces Asset partitioning for granular pipeline orchestration, multi-team deployments for enterprise scale, synchronous deadline alert callbacks, and continued progress toward full Task SDK separation.</p>
+        <p class="box-event__blogpost--description">The Common AI Provider adds LLM and AI agent operators to Apache Airflow with 6 operators, 5 toolsets, and 20&#43; model providers in one package.</p>
         <div class="mt-auto">
-            <a href="/blog/airflow-3.2.0/">
+            <a href="/blog/common-ai-provider/">
                 
 
 <button class="btn-hollow btn-blue bodytext__medium--cerulean-blue" >Read more</button>
diff --git a/blog/airflow-2.9.0/index.html b/blog/airflow-2.9.0/index.html
index d61cd2eafa..0249989845 100644
--- a/blog/airflow-2.9.0/index.html
+++ b/blog/airflow-2.9.0/index.html
@@ -31,14 +31,14 @@
   <meta property="og:type" content="article">
     <meta property="article:section" content="blog">
     <meta property="article:published_time" content="2024-04-08T00:00:00+00:00">
-    <meta property="article:modified_time" content="2026-04-14T02:24:09+02:00">
+    <meta property="article:modified_time" content="2026-04-14T02:30:35+01:00">
     <meta property="article:tag" content="Release">
     <meta property="og:image" content="/images/feature-image.png">
 
   <meta itemprop="name" content="Apache Airflow 2.9.0: Dataset and UI Improvements">
   <meta itemprop="description" content="Apache Airflow 2.9.0 is here! Lots of exciting new Dataset and UI features/improvements this time around.">
   <meta itemprop="datePublished" content="2024-04-08T00:00:00+00:00">
-  <meta itemprop="dateModified" content="2026-04-14T02:24:09+02:00">
+  <meta itemprop="dateModified" content="2026-04-14T02:30:35+01:00">
   <meta itemprop="wordCount" content="1041">
   <meta itemprop="image" content="/images/feature-image.png">
   <meta itemprop="keywords" content="Release">
diff --git a/blog/airflow-3.1.0/index.html b/blog/airflow-3.1.0/index.html
index 5b3167b1dd..6653587bf8 100644
--- a/blog/airflow-3.1.0/index.html
+++ b/blog/airflow-3.1.0/index.html
@@ -31,14 +31,14 @@
   <meta property="og:type" content="article">
     <meta property="article:section" content="blog">
     <meta property="article:published_time" content="2025-09-25T00:00:00+00:00">
-    <meta property="article:modified_time" content="2026-04-14T02:24:09+02:00">
+    <meta property="article:modified_time" content="2026-04-14T02:30:35+01:00">
     <meta property="article:tag" content="Release">
     <meta property="og:image" content="/blog/airflow-3.1.0/images/3.1.0.jpg">
 
   <meta itemprop="name" content="Apache Airflow 3.1.0: Human-Centered Workflows">
   <meta itemprop="description" content="Apache Airflow 3.1.0 introduces Human-in-the-Loop workflows, 17-language internationalization, deadline alerts, and React plugin system for data orchestration teams.">
   <meta itemprop="datePublished" content="2025-09-25T00:00:00+00:00">
-  <meta itemprop="dateModified" content="2026-04-14T02:24:09+02:00">
+  <meta itemprop="dateModified" content="2026-04-14T02:30:35+01:00">
   <meta itemprop="wordCount" content="1583">
   <meta itemprop="image" content="/blog/airflow-3.1.0/images/3.1.0.jpg">
   <meta itemprop="keywords" content="Release">
@@ -791,23 +791,40 @@ human-centered. We can&rsquo;t wait to see what you build with it!</p>
             <div class="tags-container">
                 
                     
+                        <a class="tag" href="/blog/tags/community/">Community</a>
+                    
+                
+                    
                         <a class="tag" href="/blog/tags/release/">Release</a>
                     
                 
             </div>
-            <span class="bodytext__medium--brownish-grey box-event__blogpost--date">Tue, Apr 7, 2026</span>
+            <span class="bodytext__medium--brownish-grey box-event__blogpost--date">Tue, Apr 14, 2026</span>
         </div>
         <p class="box-event__blogpost--header">
-            <a href="/blog/airflow-3.2.0/">
-                Apache Airflow 3.2.0: Data-Aware Workflows at Scale
+            <a href="/blog/common-ai-provider/">
+                Introducing the Common AI Provider: LLM and AI Agent Support for Apache Airflow
             </a>
         </p>
         
-            <p class="box-event__blogpost--author">Rahul Vats</p>
+        <p class="box-event__blogpost--author">
+          
+          
+            
+              <a href="https://linkedin.com/in/kaxil" target="_blank" rel="noopener">Kaxil Naik</a>
+            
+            , 
+          
+            
+              <a href="https://linkedin.com/in/pavan-kumar-gopidesu" target="_blank" rel="noopener">Pavan Kumar Gopidesu</a>
+            
+            
+          
+        </p>
         
-        <p class="box-event__blogpost--description">Apache Airflow 3.2.0 introduces Asset partitioning for granular pipeline orchestration, multi-team deployments for enterprise scale, synchronous deadline alert callbacks, and continued progress toward full Task SDK separation.</p>
+        <p class="box-event__blogpost--description">The Common AI Provider adds LLM and AI agent operators to Apache Airflow with 6 operators, 5 toolsets, and 20&#43; model providers in one package.</p>
         <div class="mt-auto">
-            <a href="/blog/airflow-3.2.0/">
+            <a href="/blog/common-ai-provider/">
                 
 
 <button class="btn-hollow btn-blue bodytext__medium--cerulean-blue" >Read more</button>
@@ -832,32 +849,19 @@ human-centered. We can&rsquo;t wait to see what you build with it!</p>
                     
                 
             </div>
-            <span class="bodytext__medium--brownish-grey box-event__blogpost--date">Tue, Apr 22, 2025</span>
+            <span class="bodytext__medium--brownish-grey box-event__blogpost--date">Tue, Apr 7, 2026</span>
         </div>
         <p class="box-event__blogpost--header">
-            <a href="/blog/airflow-three-point-oh-is-here/">
-                Apache Airflow® 3 is Generally Available!
+            <a href="/blog/airflow-3.2.0/">
+                Apache Airflow 3.2.0: Data-Aware Workflows at Scale
             </a>
         </p>
         
-        <p class="box-event__blogpost--author">
-          
-          
-            
-              <a href="https://linkedin.com/in/kaxil" target="_blank" rel="noopener">Kaxil Naik</a>
-            
-            , 
-          
-            
-              <a href="https://linkedin.com/in/vikramkoka" target="_blank" rel="noopener">Vikram Koka</a>
-            
-            
-          
-        </p>
+            <p class="box-event__blogpost--author">Rahul Vats</p>
         
-        <p class="box-event__blogpost--description">We&#39;re proud to announce that Apache Airflow 3.0.0 has been released.</p>
+        <p class="box-event__blogpost--description">Apache Airflow 3.2.0 introduces Asset partitioning for granular pipeline orchestration, multi-team deployments for enterprise scale, synchronous deadline alert callbacks, and continued progress toward full Task SDK separation.</p>
         <div class="mt-auto">
-            <a href="/blog/airflow-three-point-oh-is-here/">
+            <a href="/blog/airflow-3.2.0/">
                 
 
 <button class="btn-hollow btn-blue bodytext__medium--cerulean-blue" >Read more</button>
diff --git a/blog/airflow-3.2.0/index.html b/blog/airflow-3.2.0/index.html
index ab508d9326..08de17d4fc 100644
--- a/blog/airflow-3.2.0/index.html
+++ b/blog/airflow-3.2.0/index.html
@@ -31,14 +31,14 @@
   <meta property="og:type" content="article">
     <meta property="article:section" content="blog">
     <meta property="article:published_time" content="2026-04-07T00:00:00+00:00">
-    <meta property="article:modified_time" content="2026-04-14T02:24:09+02:00">
+    <meta property="article:modified_time" content="2026-04-14T02:30:35+01:00">
     <meta property="article:tag" content="Release">
     <meta property="og:image" content="/blog/airflow-3.2.0/images/3.2.0.jpg">
 
   <meta itemprop="name" content="Apache Airflow 3.2.0: Data-Aware Workflows at Scale">
   <meta itemprop="description" content="Apache Airflow 3.2.0 introduces Asset partitioning for granular pipeline orchestration, multi-team deployments for enterprise scale, synchronous deadline alert callbacks, and continued progress toward full Task SDK separation.">
   <meta itemprop="datePublished" content="2026-04-07T00:00:00+00:00">
-  <meta itemprop="dateModified" content="2026-04-14T02:24:09+02:00">
+  <meta itemprop="dateModified" content="2026-04-14T02:30:35+01:00">
   <meta itemprop="wordCount" content="1619">
   <meta itemprop="image" content="/blog/airflow-3.2.0/images/3.2.0.jpg">
   <meta itemprop="keywords" content="Release">
@@ -794,7 +794,7 @@ export AIRFLOW__CORE__MULTI_TEAM=True$$</div><h1 id="-deadline-alerts-now-with-s
     <a href="/blog/airflow-registry/" aria-label="Previous - Introducing the Apache Airflow Registry" class="btn btn-primary"><span class="me-1">←</span>Previous</a>
   </li>
   <li>
-    <a class="btn btn-primary disabled">Next<span class="ms-1">→</span></a>
+    <a href="/blog/common-ai-provider/" aria-label="Next - Introducing the Common AI Provider: LLM and AI Agent Support for Apache Airflow" class="btn btn-primary">Next<span class="ms-1">→</span></a>
   </li>
 </ul>
 
@@ -820,23 +820,40 @@ export AIRFLOW__CORE__MULTI_TEAM=True$$</div><h1 id="-deadline-alerts-now-with-s
             <div class="tags-container">
                 
                     
+                        <a class="tag" href="/blog/tags/community/">Community</a>
+                    
+                
+                    
                         <a class="tag" href="/blog/tags/release/">Release</a>
                     
                 
             </div>
-            <span class="bodytext__medium--brownish-grey box-event__blogpost--date">Thu, Sep 25, 2025</span>
+            <span class="bodytext__medium--brownish-grey box-event__blogpost--date">Tue, Apr 14, 2026</span>
         </div>
         <p class="box-event__blogpost--header">
-            <a href="/blog/airflow-3.1.0/">
-                Apache Airflow 3.1.0: Human-Centered Workflows
+            <a href="/blog/common-ai-provider/">
+                Introducing the Common AI Provider: LLM and AI Agent Support for Apache Airflow
             </a>
         </p>
         
-            <p class="box-event__blogpost--author">Kaxil Naik</p>
+        <p class="box-event__blogpost--author">
+          
+          
+            
+              <a href="https://linkedin.com/in/kaxil" target="_blank" rel="noopener">Kaxil Naik</a>
+            
+            , 
+          
+            
+              <a href="https://linkedin.com/in/pavan-kumar-gopidesu" target="_blank" rel="noopener">Pavan Kumar Gopidesu</a>
+            
+            
+          
+        </p>
         
-        <p class="box-event__blogpost--description">Apache Airflow 3.1.0 introduces Human-in-the-Loop workflows, 17-language internationalization, deadline alerts, and React plugin system for data orchestration teams.</p>
+        <p class="box-event__blogpost--description">The Common AI Provider adds LLM and AI agent operators to Apache Airflow with 6 operators, 5 toolsets, and 20&#43; model providers in one package.</p>
         <div class="mt-auto">
-            <a href="/blog/airflow-3.1.0/">
+            <a href="/blog/common-ai-provider/">
                 
 
 <button class="btn-hollow btn-blue bodytext__medium--cerulean-blue" >Read more</button>
@@ -861,32 +878,19 @@ export AIRFLOW__CORE__MULTI_TEAM=True$$</div><h1 id="-deadline-alerts-now-with-s
                     
                 
             </div>
-            <span class="bodytext__medium--brownish-grey box-event__blogpost--date">Tue, Apr 22, 2025</span>
+            <span class="bodytext__medium--brownish-grey box-event__blogpost--date">Thu, Sep 25, 2025</span>
         </div>
         <p class="box-event__blogpost--header">
-            <a href="/blog/airflow-three-point-oh-is-here/">
-                Apache Airflow® 3 is Generally Available!
+            <a href="/blog/airflow-3.1.0/">
+                Apache Airflow 3.1.0: Human-Centered Workflows
             </a>
         </p>
         
-        <p class="box-event__blogpost--author">
-          
-          
-            
-              <a href="https://linkedin.com/in/kaxil" target="_blank" rel="noopener">Kaxil Naik</a>
-            
-            , 
-          
-            
-              <a href="https://linkedin.com/in/vikramkoka" target="_blank" rel="noopener">Vikram Koka</a>
-            
-            
-          
-        </p>
+            <p class="box-event__blogpost--author">Kaxil Naik</p>
         
-        <p class="box-event__blogpost--description">We&#39;re proud to announce that Apache Airflow 3.0.0 has been released.</p>
+        <p class="box-event__blogpost--description">Apache Airflow 3.1.0 introduces Human-in-the-Loop workflows, 17-language internationalization, deadline alerts, and React plugin system for data orchestration teams.</p>
         <div class="mt-auto">
-            <a href="/blog/airflow-three-point-oh-is-here/">
+            <a href="/blog/airflow-3.1.0/">
                 
 
 <button class="btn-hollow btn-blue bodytext__medium--cerulean-blue" >Read more</button>
diff --git a/blog/airflow-registry/index.html b/blog/airflow-registry/index.html
index 63ae91f86d..111ca297e7 100644
--- a/blog/airflow-registry/index.html
+++ b/blog/airflow-registry/index.html
@@ -31,14 +31,14 @@
   <meta property="og:type" content="article">
     <meta property="article:section" content="blog">
     <meta property="article:published_time" content="2026-03-19T00:00:00+00:00">
-    <meta property="article:modified_time" content="2026-04-14T02:24:09+02:00">
+    <meta property="article:modified_time" content="2026-04-14T02:30:35+01:00">
     <meta property="article:tag" content="Community">
     <meta property="og:image" content="/images/feature-image.png">
 
   <meta itemprop="name" content="Introducing the Apache Airflow Registry">
   <meta itemprop="description" content="The Apache Airflow Registry is a searchable catalog of 98 providers and 1,600&#43; modules — operators, hooks, sensors, triggers, and more — now live on airflow.apache.org.">
   <meta itemprop="datePublished" content="2026-03-19T00:00:00+00:00">
-  <meta itemprop="dateModified" content="2026-04-14T02:24:09+02:00">
+  <meta itemprop="dateModified" content="2026-04-14T02:30:35+01:00">
   <meta itemprop="wordCount" content="520">
   <meta itemprop="image" content="/images/feature-image.png">
   <meta itemprop="keywords" content="Community">
@@ -692,23 +692,36 @@
                     
                 
                     
-                        <a class="tag" href="/blog/tags/airflow-summit/">Airflow summit</a>
+                        <a class="tag" href="/blog/tags/release/">Release</a>
                     
                 
             </div>
-            <span class="bodytext__medium--brownish-grey box-event__blogpost--date">Mon, May 16, 2022</span>
+            <span class="bodytext__medium--brownish-grey box-event__blogpost--date">Tue, Apr 14, 2026</span>
         </div>
         <p class="box-event__blogpost--header">
-            <a href="/blog/airflow_summit_2022/">
-                Airflow Summit 2022
+            <a href="/blog/common-ai-provider/">
+                Introducing the Common AI Provider: LLM and AI Agent Support for Apache Airflow
             </a>
         </p>
         
-            <p class="box-event__blogpost--author">Jarek Potiuk</p>
+        <p class="box-event__blogpost--author">
+          
+          
+            
+              <a href="https://linkedin.com/in/kaxil" target="_blank" rel="noopener">Kaxil Naik</a>
+            
+            , 
+          
+            
+              <a href="https://linkedin.com/in/pavan-kumar-gopidesu" target="_blank" rel="noopener">Pavan Kumar Gopidesu</a>
+            
+            
+          
+        </p>
         
-        <p class="box-event__blogpost--description">Airflow Summit 2022 is here</p>
+        <p class="box-event__blogpost--description">The Common AI Provider adds LLM and AI agent operators to Apache Airflow with 6 operators, 5 toolsets, and 20&#43; model providers in one package.</p>
         <div class="mt-auto">
-            <a href="/blog/airflow_summit_2022/">
+            <a href="/blog/common-ai-provider/">
                 
 
 <button class="btn-hollow btn-blue bodytext__medium--cerulean-blue" >Read more</button>
@@ -737,19 +750,19 @@
                     
                 
             </div>
-            <span class="bodytext__medium--brownish-grey box-event__blogpost--date">Sun, Mar 21, 2021</span>
+            <span class="bodytext__medium--brownish-grey box-event__blogpost--date">Mon, May 16, 2022</span>
         </div>
         <p class="box-event__blogpost--header">
-            <a href="/blog/airflow_summit_2021/">
-                Airflow Summit 2021
+            <a href="/blog/airflow_summit_2022/">
+                Airflow Summit 2022
             </a>
         </p>
         
-            <p class="box-event__blogpost--author">Tomasz Urbaszek</p>
+            <p class="box-event__blogpost--author">Jarek Potiuk</p>
         
-        <p class="box-event__blogpost--description">We are thrilled about Airflow Summit 2021!</p>
+        <p class="box-event__blogpost--description">Airflow Summit 2022 is here</p>
         <div class="mt-auto">
-            <a href="/blog/airflow_summit_2021/">
+            <a href="/blog/airflow_summit_2022/">
                 
 
 <button class="btn-hollow btn-blue bodytext__medium--cerulean-blue" >Read more</button>
diff --git a/blog/airflow-survey-2020/index.html b/blog/airflow-survey-2020/index.html
index 6258df1b6b..605aebf13e 100644
--- a/blog/airflow-survey-2020/index.html
+++ b/blog/airflow-survey-2020/index.html
@@ -31,7 +31,7 @@
   <meta property="og:type" content="article">
     <meta property="article:section" content="blog">
     <meta property="article:published_time" content="2021-03-09T00:00:00+00:00">
-    <meta property="article:modified_time" content="2026-04-14T02:24:09+02:00">
+    <meta property="article:modified_time" content="2026-04-14T02:30:35+01:00">
     <meta property="article:tag" content="Community">
     <meta property="article:tag" content="Survey">
     <meta property="article:tag" content="Users">
@@ -40,7 +40,7 @@
   <meta itemprop="name" content="Airflow Survey 2020">
   <meta itemprop="description" content="We observe steady growth in number of users as well as in an amount of active contributors. So listening and understanding our community is of high importance.">
   <meta itemprop="datePublished" content="2021-03-09T00:00:00+00:00">
-  <meta itemprop="dateModified" content="2026-04-14T02:24:09+02:00">
+  <meta itemprop="dateModified" content="2026-04-14T02:30:35+01:00">
   <meta itemprop="wordCount" content="2136">
   <meta itemprop="image" content="/images/feature-image.png">
   <meta itemprop="keywords" content="Community,Survey,Users">
diff --git a/blog/airflow-survey-2022/index.html b/blog/airflow-survey-2022/index.html
index 4a5c792058..74d5714085 100644
--- a/blog/airflow-survey-2022/index.html
+++ b/blog/airflow-survey-2022/index.html
@@ -31,7 +31,7 @@
   <meta property="og:type" content="article">
     <meta property="article:section" content="blog">
     <meta property="article:published_time" content="2022-06-17T00:00:00+00:00">
-    <meta property="article:modified_time" content="2026-04-14T02:24:09+02:00">
+    <meta property="article:modified_time" content="2026-04-14T02:30:35+01:00">
     <meta property="article:tag" content="Community">
     <meta property="article:tag" content="Survey">
     <meta property="article:tag" content="Users">
@@ -40,7 +40,7 @@
   <meta itemprop="name" content="Airflow Survey 2022">
   <meta itemprop="description" content="2021 saw rapid adoption of Airflow 2, and continued growth of the community. This annual survey helps us understand how people are using Airflow, and where we can best focus our efforts going forward.">
   <meta itemprop="datePublished" content="2022-06-17T00:00:00+00:00">
-  <meta itemprop="dateModified" content="2026-04-14T02:24:09+02:00">
+  <meta itemprop="dateModified" content="2026-04-14T02:30:35+01:00">
   <meta itemprop="wordCount" content="3866">
   <meta itemprop="image" content="/images/feature-image.png">
   <meta itemprop="keywords" content="Community,Survey,Users">
diff --git a/blog/airflow-survey-2023/index.html b/blog/airflow-survey-2023/index.html
index 33f9d06ec2..e0bfd58b25 100644
--- a/blog/airflow-survey-2023/index.html
+++ b/blog/airflow-survey-2023/index.html
@@ -31,7 +31,7 @@
   <meta property="og:type" content="article">
     <meta property="article:section" content="blog">
     <meta property="article:published_time" content="2023-09-21T00:00:00+00:00">
-    <meta property="article:modified_time" content="2026-04-14T02:24:09+02:00">
+    <meta property="article:modified_time" content="2026-04-14T02:30:35+01:00">
     <meta property="article:tag" content="Community">
     <meta property="article:tag" content="Survey">
     <meta property="article:tag" content="Users">
@@ -40,7 +40,7 @@
   <meta itemprop="name" content="Airflow Survey 2023">
   <meta itemprop="description" content="Airflow 2 has seen rapid adoption, accompanied by continuous community growth. This annual survey helps us understand how people use Airflow and where we can best focus our efforts as we advance.">
   <meta itemprop="datePublished" content="2023-09-21T00:00:00+00:00">
-  <meta itemprop="dateModified" content="2026-04-14T02:24:09+02:00">
+  <meta itemprop="dateModified" content="2026-04-14T02:30:35+01:00">
   <meta itemprop="wordCount" content="3">
   <meta itemprop="image" content="/images/feature-image.png">
   <meta itemprop="keywords" content="Community,Survey,Users">
diff --git a/blog/airflow-survey-2024/index.html b/blog/airflow-survey-2024/index.html
index e6c1f63128..618c42c359 100644
--- a/blog/airflow-survey-2024/index.html
+++ b/blog/airflow-survey-2024/index.html
@@ -31,7 +31,7 @@
   <meta property="og:type" content="article">
     <meta property="article:section" content="blog">
     <meta property="article:published_time" content="2025-02-27T00:00:00+00:00">
-    <meta property="article:modified_time" content="2026-04-14T02:24:09+02:00">
+    <meta property="article:modified_time" content="2026-04-14T02:30:35+01:00">
     <meta property="article:tag" content="Community">
     <meta property="article:tag" content="Survey">
     <meta property="article:tag" content="Users">
@@ -40,7 +40,7 @@
   <meta itemprop="name" content="Airflow Survey 2024">
   <meta itemprop="description" content="With more than 5,250 responses from 116 countries, this is the largest data engineering survey to date. Conducted annually, it offers valuable insights into Airflow usage and helps guide our future efforts.">
   <meta itemprop="datePublished" content="2025-02-27T00:00:00+00:00">
-  <meta itemprop="dateModified" content="2026-04-14T02:24:09+02:00">
+  <meta itemprop="dateModified" content="2026-04-14T02:30:35+01:00">
   <meta itemprop="wordCount" content="45">
   <meta itemprop="image" content="/images/feature-image.png">
   <meta itemprop="keywords" content="Community,Survey,Users">
diff --git a/blog/airflow-survey-2025/index.html b/blog/airflow-survey-2025/index.html
index d379f35696..869368ccad 100644
--- a/blog/airflow-survey-2025/index.html
+++ b/blog/airflow-survey-2025/index.html
@@ -31,7 +31,7 @@
   <meta property="og:type" content="article">
     <meta property="article:section" content="blog">
     <meta property="article:published_time" content="2026-01-22T00:00:00+00:00">
-    <meta property="article:modified_time" content="2026-04-14T02:24:09+02:00">
+    <meta property="article:modified_time" content="2026-04-14T02:30:35+01:00">
     <meta property="article:tag" content="Community">
     <meta property="article:tag" content="Survey">
     <meta property="article:tag" content="Users">
@@ -40,7 +40,7 @@
   <meta itemprop="name" content="Airflow Survey 2025">
   <meta itemprop="description" content="With more than 5,818 responses from 122 countries, this is the largest data engineering survey to date. Conducted annually, the Apache Airflow Survey offers valuable insights into Airflow usage and helps guide our future efforts.">
   <meta itemprop="datePublished" content="2026-01-22T00:00:00+00:00">
-  <meta itemprop="dateModified" content="2026-04-14T02:24:09+02:00">
+  <meta itemprop="dateModified" content="2026-04-14T02:30:35+01:00">
   <meta itemprop="wordCount" content="45">
   <meta itemprop="image" content="/images/feature-image.png">
   <meta itemprop="keywords" content="Community,Survey,Users">
diff --git a/blog/airflow-survey/index.html b/blog/airflow-survey/index.html
index af6fa621af..9d3a9327b6 100644
--- a/blog/airflow-survey/index.html
+++ b/blog/airflow-survey/index.html
@@ -31,7 +31,7 @@
   <meta property="og:type" content="article">
     <meta property="article:section" content="blog">
     <meta property="article:published_time" content="2019-12-11T00:00:00+00:00">
-    <meta property="article:modified_time" content="2026-04-14T02:24:09+02:00">
+    <meta property="article:modified_time" content="2026-04-14T02:30:35+01:00">
     <meta property="article:tag" content="Community">
     <meta property="article:tag" content="Survey">
     <meta property="article:tag" content="Users">
@@ -40,7 +40,7 @@
   <meta itemprop="name" content="Airflow Survey 2019">
   <meta itemprop="description" content="Receiving and adjusting to our users’ feedback is a must. Let’s see who Airflow users are, how they play with it, and what they miss.">
   <meta itemprop="datePublished" content="2019-12-11T00:00:00+00:00">
-  <meta itemprop="dateModified" content="2026-04-14T02:24:09+02:00">
+  <meta itemprop="dateModified" content="2026-04-14T02:30:35+01:00">
   <meta itemprop="wordCount" content="1723">
   <meta itemprop="image" content="/images/feature-image.png">
   <meta itemprop="keywords" content="Community,Survey,Users">
diff --git a/blog/airflow-three-point-oh-is-here/index.html b/blog/airflow-three-point-oh-is-here/index.html
index 15a85137ff..beecbf610d 100644
--- a/blog/airflow-three-point-oh-is-here/index.html
+++ b/blog/airflow-three-point-oh-is-here/index.html
@@ -31,14 +31,14 @@
   <meta property="og:type" content="article">
     <meta property="article:section" content="blog">
     <meta property="article:published_time" content="2025-04-22T00:00:00+00:00">
-    <meta property="article:modified_time" content="2026-04-14T02:24:09+02:00">
+    <meta property="article:modified_time" content="2026-04-14T02:30:35+01:00">
     <meta property="article:tag" content="Release">
     <meta property="og:image" content="/images/feature-image.png">
 
   <meta itemprop="name" content="Apache Airflow® 3 is Generally Available!">
   <meta itemprop="description" content="We&#39;re proud to announce that Apache Airflow 3.0.0 has been released.">
   <meta itemprop="datePublished" content="2025-04-22T00:00:00+00:00">
-  <meta itemprop="dateModified" content="2026-04-14T02:24:09+02:00">
+  <meta itemprop="dateModified" content="2026-04-14T02:30:35+01:00">
   <meta itemprop="wordCount" content="2194">
   <meta itemprop="image" content="/images/feature-image.png">
   <meta itemprop="keywords" content="Release">
@@ -1040,23 +1040,40 @@ Let’s build the future of data orchestration—together.</p>
             <div class="tags-container">
                 
                     
+                        <a class="tag" href="/blog/tags/community/">Community</a>
+                    
+                
+                    
                         <a class="tag" href="/blog/tags/release/">Release</a>
                     
                 
             </div>
-            <span class="bodytext__medium--brownish-grey box-event__blogpost--date">Tue, Apr 7, 2026</span>
+            <span class="bodytext__medium--brownish-grey box-event__blogpost--date">Tue, Apr 14, 2026</span>
         </div>
         <p class="box-event__blogpost--header">
-            <a href="/blog/airflow-3.2.0/">
-                Apache Airflow 3.2.0: Data-Aware Workflows at Scale
+            <a href="/blog/common-ai-provider/">
+                Introducing the Common AI Provider: LLM and AI Agent Support for Apache Airflow
             </a>
         </p>
         
-            <p class="box-event__blogpost--author">Rahul Vats</p>
+        <p class="box-event__blogpost--author">
+          
+          
+            
+              <a href="https://linkedin.com/in/kaxil" target="_blank" rel="noopener">Kaxil Naik</a>
+            
+            , 
+          
+            
+              <a href="https://linkedin.com/in/pavan-kumar-gopidesu" target="_blank" rel="noopener">Pavan Kumar Gopidesu</a>
+            
+            
+          
+        </p>
         
-        <p class="box-event__blogpost--description">Apache Airflow 3.2.0 introduces Asset partitioning for granular pipeline orchestration, multi-team deployments for enterprise scale, synchronous deadline alert callbacks, and continued progress toward full Task SDK separation.</p>
+        <p class="box-event__blogpost--description">The Common AI Provider adds LLM and AI agent operators to Apache Airflow with 6 operators, 5 toolsets, and 20&#43; model providers in one package.</p>
         <div class="mt-auto">
-            <a href="/blog/airflow-3.2.0/">
+            <a href="/blog/common-ai-provider/">
                 
 
 <button class="btn-hollow btn-blue bodytext__medium--cerulean-blue" >Read more</button>
@@ -1081,19 +1098,19 @@ Let’s build the future of data orchestration—together.</p>
                     
                 
             </div>
-            <span class="bodytext__medium--brownish-grey box-event__blogpost--date">Thu, Sep 25, 2025</span>
+            <span class="bodytext__medium--brownish-grey box-event__blogpost--date">Tue, Apr 7, 2026</span>
         </div>
         <p class="box-event__blogpost--header">
-            <a href="/blog/airflow-3.1.0/">
-                Apache Airflow 3.1.0: Human-Centered Workflows
+            <a href="/blog/airflow-3.2.0/">
+                Apache Airflow 3.2.0: Data-Aware Workflows at Scale
             </a>
         </p>
         
-            <p class="box-event__blogpost--author">Kaxil Naik</p>
+            <p class="box-event__blogpost--author">Rahul Vats</p>
         
-        <p class="box-event__blogpost--description">Apache Airflow 3.1.0 introduces Human-in-the-Loop workflows, 17-language internationalization, deadline alerts, and React plugin system for data orchestration teams.</p>
+        <p class="box-event__blogpost--description">Apache Airflow 3.2.0 introduces Asset partitioning for granular pipeline orchestration, multi-team deployments for enterprise scale, synchronous deadline alert callbacks, and continued progress toward full Task SDK separation.</p>
         <div class="mt-auto">
-            <a href="/blog/airflow-3.1.0/">
+            <a href="/blog/airflow-3.2.0/">
                 
 
 <button class="btn-hollow btn-blue bodytext__medium--cerulean-blue" >Read more</button>
diff --git a/blog/airflow-two-point-oh-is-here/index.html b/blog/airflow-two-point-oh-is-here/index.html
index c0429b95fc..b05307e2b9 100644
--- a/blog/airflow-two-point-oh-is-here/index.html
+++ b/blog/airflow-two-point-oh-is-here/index.html
@@ -31,14 +31,14 @@
   <meta property="og:type" content="article">
     <meta property="article:section" content="blog">
     <meta property="article:published_time" content="2020-12-17T00:00:00+00:00">
-    <meta property="article:modified_time" content="2026-04-14T02:24:09+02:00">
+    <meta property="article:modified_time" content="2026-04-14T02:30:35+01:00">
     <meta property="article:tag" content="Release">
     <meta property="og:image" content="/images/feature-image.png">
 
   <meta itemprop="name" content="Apache Airflow 2.0 is here!">
   <meta itemprop="description" content="We&#39;re proud to announce that Apache Airflow 2.0.0 has been released.">
   <meta itemprop="datePublished" content="2020-12-17T00:00:00+00:00">
-  <meta itemprop="dateModified" content="2026-04-14T02:24:09+02:00">
+  <meta itemprop="dateModified" content="2026-04-14T02:30:35+01:00">
   <meta itemprop="wordCount" content="1165">
   <meta itemprop="image" content="/images/feature-image.png">
   <meta itemprop="keywords" content="Release">
diff --git a/blog/airflow_summit_2021/index.html b/blog/airflow_summit_2021/index.html
index de1d02d1e9..db769efbb9 100644
--- a/blog/airflow_summit_2021/index.html
+++ b/blog/airflow_summit_2021/index.html
@@ -31,7 +31,7 @@
   <meta property="og:type" content="article">
     <meta property="article:section" content="blog">
     <meta property="article:published_time" content="2021-03-21T00:00:00+00:00">
-    <meta property="article:modified_time" content="2026-04-14T02:24:09+02:00">
+    <meta property="article:modified_time" content="2026-04-14T02:30:35+01:00">
     <meta property="article:tag" content="Community">
     <meta property="article:tag" content="Airflow Summit">
     <meta property="og:image" content="/images/feature-image.png">
@@ -39,7 +39,7 @@
   <meta itemprop="name" content="Airflow Summit 2021">
   <meta itemprop="description" content="We are thrilled about Airflow Summit 2021!">
   <meta itemprop="datePublished" content="2021-03-21T00:00:00+00:00">
-  <meta itemprop="dateModified" content="2026-04-14T02:24:09+02:00">
+  <meta itemprop="dateModified" content="2026-04-14T02:30:35+01:00">
   <meta itemprop="wordCount" content="77">
   <meta itemprop="image" content="/images/feature-image.png">
   <meta itemprop="keywords" content="Community,Airflow Summit">
@@ -657,20 +657,37 @@ participate in its development.</p>
                         <a class="tag" href="/blog/tags/community/">Community</a>
                     
                 
+                    
+                        <a class="tag" href="/blog/tags/release/">Release</a>
+                    
+                
             </div>
-            <span class="bodytext__medium--brownish-grey box-event__blogpost--date">Thu, Mar 19, 2026</span>
+            <span class="bodytext__medium--brownish-grey box-event__blogpost--date">Tue, Apr 14, 2026</span>
         </div>
         <p class="box-event__blogpost--header">
-            <a href="/blog/airflow-registry/">
-                Introducing the Apache Airflow Registry
+            <a href="/blog/common-ai-provider/">
+                Introducing the Common AI Provider: LLM and AI Agent Support for Apache Airflow
             </a>
         </p>
         
-            <p class="box-event__blogpost--author">Kaxil Naik</p>
+        <p class="box-event__blogpost--author">
+          
+          
+            
+              <a href="https://linkedin.com/in/kaxil" target="_blank" rel="noopener">Kaxil Naik</a>
+            
+            , 
+          
+            
+              <a href="https://linkedin.com/in/pavan-kumar-gopidesu" target="_blank" rel="noopener">Pavan Kumar Gopidesu</a>
+            
+            
+          
+        </p>
         
-        <p class="box-event__blogpost--description">The Apache Airflow Registry is a searchable catalog of 98 providers and 1,600&#43; modules — operators, hooks, sensors, triggers, and more — now live on airflow.apache.org.</p>
+        <p class="box-event__blogpost--description">The Common AI Provider adds LLM and AI agent operators to Apache Airflow with 6 operators, 5 toolsets, and 20&#43; model providers in one package.</p>
         <div class="mt-auto">
-            <a href="/blog/airflow-registry/">
+            <a href="/blog/common-ai-provider/">
                 
 
 <button class="btn-hollow btn-blue bodytext__medium--cerulean-blue" >Read more</button>
diff --git a/blog/airflow_summit_2022/index.html b/blog/airflow_summit_2022/index.html
index fcda922084..7912f6b02e 100644
--- a/blog/airflow_summit_2022/index.html
+++ b/blog/airflow_summit_2022/index.html
@@ -31,7 +31,7 @@
   <meta property="og:type" content="article">
     <meta property="article:section" content="blog">
     <meta property="article:published_time" content="2022-05-16T00:00:00+00:00">
-    <meta property="article:modified_time" content="2026-04-14T02:24:09+02:00">
+    <meta property="article:modified_time" content="2026-04-14T02:30:35+01:00">
     <meta property="article:tag" content="Community">
     <meta property="article:tag" content="Airflow Summit">
     <meta property="og:image" content="/images/feature-image.png">
@@ -39,7 +39,7 @@
   <meta itemprop="name" content="Airflow Summit 2022">
   <meta itemprop="description" content="Airflow Summit 2022 is here">
   <meta itemprop="datePublished" content="2022-05-16T00:00:00+00:00">
-  <meta itemprop="dateModified" content="2026-04-14T02:24:09+02:00">
+  <meta itemprop="dateModified" content="2026-04-14T02:30:35+01:00">
   <meta itemprop="wordCount" content="129">
   <meta itemprop="image" content="/images/feature-image.png">
   <meta itemprop="keywords" content="Community,Airflow Summit">
@@ -660,20 +660,37 @@ communities to watch the event and network.</p>
                         <a class="tag" href="/blog/tags/community/">Community</a>
                     
                 
+                    
+                        <a class="tag" href="/blog/tags/release/">Release</a>
+                    
+                
             </div>
-            <span class="bodytext__medium--brownish-grey box-event__blogpost--date">Thu, Mar 19, 2026</span>
+            <span class="bodytext__medium--brownish-grey box-event__blogpost--date">Tue, Apr 14, 2026</span>
         </div>
         <p class="box-event__blogpost--header">
-            <a href="/blog/airflow-registry/">
-                Introducing the Apache Airflow Registry
+            <a href="/blog/common-ai-provider/">
+                Introducing the Common AI Provider: LLM and AI Agent Support for Apache Airflow
             </a>
         </p>
         
-            <p class="box-event__blogpost--author">Kaxil Naik</p>
+        <p class="box-event__blogpost--author">
+          
+          
+            
+              <a href="https://linkedin.com/in/kaxil" target="_blank" rel="noopener">Kaxil Naik</a>
+            
+            , 
+          
+            
+              <a href="https://linkedin.com/in/pavan-kumar-gopidesu" target="_blank" rel="noopener">Pavan Kumar Gopidesu</a>
+            
+            
+          
+        </p>
         
-        <p class="box-event__blogpost--description">The Apache Airflow Registry is a searchable catalog of 98 providers and 1,600&#43; modules — operators, hooks, sensors, triggers, and more — now live on airflow.apache.org.</p>
+        <p class="box-event__blogpost--description">The Common AI Provider adds LLM and AI agent operators to Apache Airflow with 6 operators, 5 toolsets, and 20&#43; model providers in one package.</p>
         <div class="mt-auto">
-            <a href="/blog/airflow-registry/">
+            <a href="/blog/common-ai-provider/">
                 
 
 <button class="btn-hollow btn-blue bodytext__medium--cerulean-blue" >Read more</button>
diff --git a/blog/airflowctl-0.1.0/index.html b/blog/airflowctl-0.1.0/index.html
index 4ba7ec3553..c06ad798d1 100644
--- a/blog/airflowctl-0.1.0/index.html
+++ b/blog/airflowctl-0.1.0/index.html
@@ -31,14 +31,14 @@
   <meta property="og:type" content="article">
     <meta property="article:section" content="blog">
     <meta property="article:published_time" content="2025-10-15T00:00:00+00:00">
-    <meta property="article:modified_time" content="2026-04-14T02:24:09+02:00">
+    <meta property="article:modified_time" content="2026-04-14T02:30:35+01:00">
     <meta property="article:tag" content="Release">
     <meta property="og:image" content="/images/blog/airflowctl-0.1.0/airflowctl-cover.png">
 
   <meta itemprop="name" content="Apache Airflow CTL aka airflowctl 0.1.0">
   <meta itemprop="description" content="A new way of using API in Airflow. Apache Airflow CTL aka airflowctl 0.1.0 is released! Secure way to manage your Apache Airflow deployments with ease.">
   <meta itemprop="datePublished" content="2025-10-15T00:00:00+00:00">
-  <meta itemprop="dateModified" content="2026-04-14T02:24:09+02:00">
+  <meta itemprop="dateModified" content="2026-04-14T02:30:35+01:00">
   <meta itemprop="wordCount" content="898">
   <meta itemprop="image" content="/images/blog/airflowctl-0.1.0/airflowctl-cover.png">
   <meta itemprop="keywords" content="Release">
diff --git a/blog/announcing-new-website/index.html b/blog/announcing-new-website/index.html
index 4fea2add93..94bf408ec8 100644
--- a/blog/announcing-new-website/index.html
+++ b/blog/announcing-new-website/index.html
@@ -31,14 +31,14 @@
   <meta property="og:type" content="article">
     <meta property="article:section" content="blog">
     <meta property="article:published_time" content="2019-12-11T00:00:00+00:00">
-    <meta property="article:modified_time" content="2026-04-14T02:24:09+02:00">
+    <meta property="article:modified_time" content="2026-04-14T02:30:35+01:00">
     <meta property="article:tag" content="Community">
     <meta property="og:image" content="/images/feature-image.png">
 
   <meta itemprop="name" content="New Airflow website">
   <meta itemprop="description" content="We are thrilled about our new website!">
   <meta itemprop="datePublished" content="2019-12-11T00:00:00+00:00">
-  <meta itemprop="dateModified" content="2026-04-14T02:24:09+02:00">
+  <meta itemprop="dateModified" content="2026-04-14T02:30:35+01:00">
   <meta itemprop="wordCount" content="282">
   <meta itemprop="image" content="/images/feature-image.png">
   <meta itemprop="keywords" content="Community">
@@ -621,20 +621,37 @@ and that its improved accessibility increases adoption and use of Apache Airflow
                         <a class="tag" href="/blog/tags/community/">Community</a>
                     
                 
+                    
+                        <a class="tag" href="/blog/tags/release/">Release</a>
+                    
+                
             </div>
-            <span class="bodytext__medium--brownish-grey box-event__blogpost--date">Thu, Mar 19, 2026</span>
+            <span class="bodytext__medium--brownish-grey box-event__blogpost--date">Tue, Apr 14, 2026</span>
         </div>
         <p class="box-event__blogpost--header">
-            <a href="/blog/airflow-registry/">
-                Introducing the Apache Airflow Registry
+            <a href="/blog/common-ai-provider/">
+                Introducing the Common AI Provider: LLM and AI Agent Support for Apache Airflow
             </a>
         </p>
         
-            <p class="box-event__blogpost--author">Kaxil Naik</p>
+        <p class="box-event__blogpost--author">
+          
+          
+            
+              <a href="https://linkedin.com/in/kaxil" target="_blank" rel="noopener">Kaxil Naik</a>
+            
+            , 
+          
+            
+              <a href="https://linkedin.com/in/pavan-kumar-gopidesu" target="_blank" rel="noopener">Pavan Kumar Gopidesu</a>
+            
+            
+          
+        </p>
         
-        <p class="box-event__blogpost--description">The Apache Airflow Registry is a searchable catalog of 98 providers and 1,600&#43; modules — operators, hooks, sensors, triggers, and more — now live on airflow.apache.org.</p>
+        <p class="box-event__blogpost--description">The Common AI Provider adds LLM and AI agent operators to Apache Airflow with 6 operators, 5 toolsets, and 20&#43; model providers in one package.</p>
         <div class="mt-auto">
-            <a href="/blog/airflow-registry/">
+            <a href="/blog/common-ai-provider/">
                 
 
 <button class="btn-hollow btn-blue bodytext__medium--cerulean-blue" >Read more</button>
@@ -658,24 +675,20 @@ and that its improved accessibility increases adoption and use of Apache Airflow
                         <a class="tag" href="/blog/tags/community/">Community</a>
                     
                 
-                    
-                        <a class="tag" href="/blog/tags/airflow-summit/">Airflow summit</a>
-                    
-                
             </div>
-            <span class="bodytext__medium--brownish-grey box-event__blogpost--date">Mon, May 16, 2022</span>
+            <span class="bodytext__medium--brownish-grey box-event__blogpost--date">Thu, Mar 19, 2026</span>
         </div>
         <p class="box-event__blogpost--header">
-            <a href="/blog/airflow_summit_2022/">
-                Airflow Summit 2022
+            <a href="/blog/airflow-registry/">
+                Introducing the Apache Airflow Registry
             </a>
         </p>
         
-            <p class="box-event__blogpost--author">Jarek Potiuk</p>
+            <p class="box-event__blogpost--author">Kaxil Naik</p>
         
-        <p class="box-event__blogpost--description">Airflow Summit 2022 is here</p>
+        <p class="box-event__blogpost--description">The Apache Airflow Registry is a searchable catalog of 98 providers and 1,600&#43; modules — operators, hooks, sensors, triggers, and more — now live on airflow.apache.org.</p>
         <div class="mt-auto">
-            <a href="/blog/airflow_summit_2022/">
+            <a href="/blog/airflow-registry/">
                 
 
 <button class="btn-hollow btn-blue bodytext__medium--cerulean-blue" >Read more</button>
diff --git a/blog/apache-airflow-for-newcomers/index.html b/blog/apache-airflow-for-newcomers/index.html
index 65f187419c..7143eaaa02 100644
--- a/blog/apache-airflow-for-newcomers/index.html
+++ b/blog/apache-airflow-for-newcomers/index.html
@@ -32,7 +32,7 @@ Authoring Workflow in Apache Airflow. Airflow makes it easy to author workflows
   <meta property="og:type" content="article">
     <meta property="article:section" content="blog">
     <meta property="article:published_time" content="2020-08-17T00:00:00+00:00">
-    <meta property="article:modified_time" content="2026-04-14T02:24:09+02:00">
+    <meta property="article:modified_time" content="2026-04-14T02:30:35+01:00">
     <meta property="article:tag" content="Community">
     <meta property="og:image" content="/images/feature-image.png">
 
@@ -40,7 +40,7 @@ Authoring Workflow in Apache Airflow. Airflow makes it easy to author workflows
   <meta itemprop="description" content="Apache Airflow is a platform to programmatically author, schedule, and monitor workflows. A workflow is a sequence of tasks that processes a set of data. You can think of workflow as the path that describes how tasks go from being undone to done. Scheduling, on the other hand, is the process of planning, controlling, and optimizing when a particular task should be done.
 Authoring Workflow in Apache Airflow. Airflow makes it easy to author workflows using python scripts. A Directed Acyclic Graph (DAG) represents a workflow in Airflow. It is a collection of tasks in a way that shows each task’s relationships and dependencies. You can have as many DAGs as you want, and Airflow will execute them according to the task’s relationships and dependencies. If task B depends on the successful execution of another task A, it means Airflow will run task A and only r [...]
   <meta itemprop="datePublished" content="2020-08-17T00:00:00+00:00">
-  <meta itemprop="dateModified" content="2026-04-14T02:24:09+02:00">
+  <meta itemprop="dateModified" content="2026-04-14T02:30:35+01:00">
   <meta itemprop="wordCount" content="1070">
   <meta itemprop="image" content="/images/feature-image.png">
   <meta itemprop="keywords" content="Community">
@@ -711,20 +711,37 @@ and <a href="https://github.com/turbaszek">Tomek</a> for all their support. I&rs
                         <a class="tag" href="/blog/tags/community/">Community</a>
                     
                 
+                    
+                        <a class="tag" href="/blog/tags/release/">Release</a>
+                    
+                
             </div>
-            <span class="bodytext__medium--brownish-grey box-event__blogpost--date">Thu, Mar 19, 2026</span>
+            <span class="bodytext__medium--brownish-grey box-event__blogpost--date">Tue, Apr 14, 2026</span>
         </div>
         <p class="box-event__blogpost--header">
-            <a href="/blog/airflow-registry/">
-                Introducing the Apache Airflow Registry
+            <a href="/blog/common-ai-provider/">
+                Introducing the Common AI Provider: LLM and AI Agent Support for Apache Airflow
             </a>
         </p>
         
-            <p class="box-event__blogpost--author">Kaxil Naik</p>
+        <p class="box-event__blogpost--author">
+          
+          
+            
+              <a href="https://linkedin.com/in/kaxil" target="_blank" rel="noopener">Kaxil Naik</a>
+            
+            , 
+          
+            
+              <a href="https://linkedin.com/in/pavan-kumar-gopidesu" target="_blank" rel="noopener">Pavan Kumar Gopidesu</a>
+            
+            
+          
+        </p>
         
-        <p class="box-event__blogpost--description">The Apache Airflow Registry is a searchable catalog of 98 providers and 1,600&#43; modules — operators, hooks, sensors, triggers, and more — now live on airflow.apache.org.</p>
+        <p class="box-event__blogpost--description">The Common AI Provider adds LLM and AI agent operators to Apache Airflow with 6 operators, 5 toolsets, and 20&#43; model providers in one package.</p>
         <div class="mt-auto">
-            <a href="/blog/airflow-registry/">
+            <a href="/blog/common-ai-provider/">
                 
 
 <button class="btn-hollow btn-blue bodytext__medium--cerulean-blue" >Read more</button>
@@ -748,24 +765,20 @@ and <a href="https://github.com/turbaszek">Tomek</a> for all their support. I&rs
                         <a class="tag" href="/blog/tags/community/">Community</a>
                     
                 
-                    
-                        <a class="tag" href="/blog/tags/airflow-summit/">Airflow summit</a>
-                    
-                
             </div>
-            <span class="bodytext__medium--brownish-grey box-event__blogpost--date">Mon, May 16, 2022</span>
+            <span class="bodytext__medium--brownish-grey box-event__blogpost--date">Thu, Mar 19, 2026</span>
         </div>
         <p class="box-event__blogpost--header">
-            <a href="/blog/airflow_summit_2022/">
-                Airflow Summit 2022
+            <a href="/blog/airflow-registry/">
+                Introducing the Apache Airflow Registry
             </a>
         </p>
         
-            <p class="box-event__blogpost--author">Jarek Potiuk</p>
+            <p class="box-event__blogpost--author">Kaxil Naik</p>
         
-        <p class="box-event__blogpost--description">Airflow Summit 2022 is here</p>
+        <p class="box-event__blogpost--description">The Apache Airflow Registry is a searchable catalog of 98 providers and 1,600&#43; modules — operators, hooks, sensors, triggers, and more — now live on airflow.apache.org.</p>
         <div class="mt-auto">
-            <a href="/blog/airflow_summit_2022/">
+            <a href="/blog/airflow-registry/">
                 
 
 <button class="btn-hollow btn-blue bodytext__medium--cerulean-blue" >Read more</button>
diff --git a/blog/apache-con-europe-2019-thoughts-and-insights-by-airflow-committers/index.html b/blog/apache-con-europe-2019-thoughts-and-insights-by-airflow-committers/index.html
index eed77a1345..6010f48e61 100644
--- a/blog/apache-con-europe-2019-thoughts-and-insights-by-airflow-committers/index.html
+++ b/blog/apache-con-europe-2019-thoughts-and-insights-by-airflow-committers/index.html
@@ -31,14 +31,14 @@
   <meta property="og:type" content="article">
     <meta property="article:section" content="blog">
     <meta property="article:published_time" content="2019-11-22T00:00:00+00:00">
-    <meta property="article:modified_time" content="2026-04-14T02:24:09+02:00">
+    <meta property="article:modified_time" content="2026-04-14T02:30:35+01:00">
     <meta property="article:tag" content="Community">
     <meta property="og:image" content="/images/feature-image.png">
 
   <meta itemprop="name" content="ApacheCon Europe 2019 — Thoughts and Insights by Airflow Committers">
   <meta itemprop="description" content="Here come some thoughts by Airflow committers and contributors from the ApacheCon Europe 2019. Get to know the ASF community!">
   <meta itemprop="datePublished" content="2019-11-22T00:00:00+00:00">
-  <meta itemprop="dateModified" content="2026-04-14T02:24:09+02:00">
+  <meta itemprop="dateModified" content="2026-04-14T02:30:35+01:00">
   <meta itemprop="wordCount" content="138">
   <meta itemprop="image" content="/images/feature-image.png">
   <meta itemprop="keywords" content="Community">
@@ -604,20 +604,37 @@
                         <a class="tag" href="/blog/tags/community/">Community</a>
                     
                 
+                    
+                        <a class="tag" href="/blog/tags/release/">Release</a>
+                    
+                
             </div>
-            <span class="bodytext__medium--brownish-grey box-event__blogpost--date">Thu, Mar 19, 2026</span>
+            <span class="bodytext__medium--brownish-grey box-event__blogpost--date">Tue, Apr 14, 2026</span>
         </div>
         <p class="box-event__blogpost--header">
-            <a href="/blog/airflow-registry/">
-                Introducing the Apache Airflow Registry
+            <a href="/blog/common-ai-provider/">
+                Introducing the Common AI Provider: LLM and AI Agent Support for Apache Airflow
             </a>
         </p>
         
-            <p class="box-event__blogpost--author">Kaxil Naik</p>
+        <p class="box-event__blogpost--author">
+          
+          
+            
+              <a href="https://linkedin.com/in/kaxil" target="_blank" rel="noopener">Kaxil Naik</a>
+            
+            , 
+          
+            
+              <a href="https://linkedin.com/in/pavan-kumar-gopidesu" target="_blank" rel="noopener">Pavan Kumar Gopidesu</a>
+            
+            
+          
+        </p>
         
-        <p class="box-event__blogpost--description">The Apache Airflow Registry is a searchable catalog of 98 providers and 1,600&#43; modules — operators, hooks, sensors, triggers, and more — now live on airflow.apache.org.</p>
+        <p class="box-event__blogpost--description">The Common AI Provider adds LLM and AI agent operators to Apache Airflow with 6 operators, 5 toolsets, and 20&#43; model providers in one package.</p>
         <div class="mt-auto">
-            <a href="/blog/airflow-registry/">
+            <a href="/blog/common-ai-provider/">
                 
 
 <button class="btn-hollow btn-blue bodytext__medium--cerulean-blue" >Read more</button>
@@ -641,24 +658,20 @@
                         <a class="tag" href="/blog/tags/community/">Community</a>
                     
                 
-                    
-                        <a class="tag" href="/blog/tags/airflow-summit/">Airflow summit</a>
-                    
-                
             </div>
-            <span class="bodytext__medium--brownish-grey box-event__blogpost--date">Mon, May 16, 2022</span>
+            <span class="bodytext__medium--brownish-grey box-event__blogpost--date">Thu, Mar 19, 2026</span>
         </div>
         <p class="box-event__blogpost--header">
-            <a href="/blog/airflow_summit_2022/">
-                Airflow Summit 2022
+            <a href="/blog/airflow-registry/">
+                Introducing the Apache Airflow Registry
             </a>
         </p>
         
-            <p class="box-event__blogpost--author">Jarek Potiuk</p>
+            <p class="box-event__blogpost--author">Kaxil Naik</p>
         
-        <p class="box-event__blogpost--description">Airflow Summit 2022 is here</p>
+        <p class="box-event__blogpost--description">The Apache Airflow Registry is a searchable catalog of 98 providers and 1,600&#43; modules — operators, hooks, sensors, triggers, and more — now live on airflow.apache.org.</p>
         <div class="mt-auto">
-            <a href="/blog/airflow_summit_2022/">
+            <a href="/blog/airflow-registry/">
                 
 
 <button class="btn-hollow btn-blue bodytext__medium--cerulean-blue" >Read more</button>
diff --git a/blog/common-ai-provider/images/agent-sql-logs.png b/blog/common-ai-provider/images/agent-sql-logs.png
new file mode 100644
index 0000000000..a491373727
Binary files /dev/null and b/blog/common-ai-provider/images/agent-sql-logs.png differ
diff --git a/blog/common-ai-provider/images/common-ai-provider.png b/blog/common-ai-provider/images/common-ai-provider.png
new file mode 100644
index 0000000000..b383eae850
Binary files /dev/null and b/blog/common-ai-provider/images/common-ai-provider.png differ
diff --git a/blog/common-ai-provider/images/durable-attempt-1.png b/blog/common-ai-provider/images/durable-attempt-1.png
new file mode 100644
index 0000000000..2079f5ddce
Binary files /dev/null and b/blog/common-ai-provider/images/durable-attempt-1.png differ
diff --git a/blog/common-ai-provider/images/durable-attempt-2.png b/blog/common-ai-provider/images/durable-attempt-2.png
new file mode 100644
index 0000000000..139bf2975e
Binary files /dev/null and b/blog/common-ai-provider/images/durable-attempt-2.png differ
diff --git a/blog/common-ai-provider/images/durable-summary.png b/blog/common-ai-provider/images/durable-summary.png
new file mode 100644
index 0000000000..625bedc3d4
Binary files /dev/null and b/blog/common-ai-provider/images/durable-summary.png differ
diff --git a/blog/common-ai-provider/images/file-analysis-csv.png b/blog/common-ai-provider/images/file-analysis-csv.png
new file mode 100644
index 0000000000..874c57d8b3
Binary files /dev/null and b/blog/common-ai-provider/images/file-analysis-csv.png differ
diff --git a/blog/common-ai-provider/images/hitl-approval.png b/blog/common-ai-provider/images/hitl-approval.png
new file mode 100644
index 0000000000..08eb82d7ca
Binary files /dev/null and b/blog/common-ai-provider/images/hitl-approval.png differ
diff --git a/blog/common-ai-provider/images/hitl-review-tab.gif b/blog/common-ai-provider/images/hitl-review-tab.gif
new file mode 100644
index 0000000000..27a9967d79
Binary files /dev/null and b/blog/common-ai-provider/images/hitl-review-tab.gif differ
diff --git a/blog/common-ai-provider/images/tool-logging.png b/blog/common-ai-provider/images/tool-logging.png
new file mode 100644
index 0000000000..3e2426a73d
Binary files /dev/null and b/blog/common-ai-provider/images/tool-logging.png differ
diff --git a/blog/airflow-3.2.0/index.html b/blog/common-ai-provider/index.html
similarity index 63%
copy from blog/airflow-3.2.0/index.html
copy to blog/common-ai-provider/index.html
index ab508d9326..683eb69e10 100644
--- a/blog/airflow-3.2.0/index.html
+++ b/blog/common-ai-provider/index.html
@@ -23,25 +23,26 @@
 <link rel="icon" type="image/png" href="/favicons/android-144x144.png" sizes="144x144">
 <link rel="icon" type="image/png" href="/favicons/android-192x192.png" sizes="192x192">
 
-<title>Apache Airflow 3.2.0: Data-Aware Workflows at Scale | Apache Airflow</title><meta property="og:url" content="/blog/airflow-3.2.0/">
+<title>Introducing the Common AI Provider: LLM and AI Agent Support for Apache Airflow | Apache Airflow</title><meta property="og:url" content="/blog/common-ai-provider/">
   <meta property="og:site_name" content="Apache Airflow">
-  <meta property="og:title" content="Apache Airflow 3.2.0: Data-Aware Workflows at Scale">
-  <meta property="og:description" content="Apache Airflow 3.2.0 introduces Asset partitioning for granular pipeline orchestration, multi-team deployments for enterprise scale, synchronous deadline alert callbacks, and continued progress toward full Task SDK separation.">
+  <meta property="og:title" content="Introducing the Common AI Provider: LLM and AI Agent Support for Apache Airflow">
+  <meta property="og:description" content="The Common AI Provider adds LLM and AI agent operators to Apache Airflow with 6 operators, 5 toolsets, and 20&#43; model providers in one package.">
   <meta property="og:locale" content="en">
   <meta property="og:type" content="article">
     <meta property="article:section" content="blog">
-    <meta property="article:published_time" content="2026-04-07T00:00:00+00:00">
-    <meta property="article:modified_time" content="2026-04-14T02:24:09+02:00">
+    <meta property="article:published_time" content="2026-04-14T00:00:00+00:00">
+    <meta property="article:modified_time" content="2026-04-14T02:30:35+01:00">
+    <meta property="article:tag" content="Community">
     <meta property="article:tag" content="Release">
-    <meta property="og:image" content="/blog/airflow-3.2.0/images/3.2.0.jpg">
+    <meta property="og:image" content="/blog/common-ai-provider/images/common-ai-provider.png">
 
-  <meta itemprop="name" content="Apache Airflow 3.2.0: Data-Aware Workflows at Scale">
-  <meta itemprop="description" content="Apache Airflow 3.2.0 introduces Asset partitioning for granular pipeline orchestration, multi-team deployments for enterprise scale, synchronous deadline alert callbacks, and continued progress toward full Task SDK separation.">
-  <meta itemprop="datePublished" content="2026-04-07T00:00:00+00:00">
-  <meta itemprop="dateModified" content="2026-04-14T02:24:09+02:00">
-  <meta itemprop="wordCount" content="1619">
-  <meta itemprop="image" content="/blog/airflow-3.2.0/images/3.2.0.jpg">
-  <meta itemprop="keywords" content="Release">
+  <meta itemprop="name" content="Introducing the Common AI Provider: LLM and AI Agent Support for Apache Airflow">
+  <meta itemprop="description" content="The Common AI Provider adds LLM and AI agent operators to Apache Airflow with 6 operators, 5 toolsets, and 20&#43; model providers in one package.">
+  <meta itemprop="datePublished" content="2026-04-14T00:00:00+00:00">
+  <meta itemprop="dateModified" content="2026-04-14T02:30:35+01:00">
+  <meta itemprop="wordCount" content="1477">
+  <meta itemprop="image" content="/blog/common-ai-provider/images/common-ai-provider.png">
+  <meta itemprop="keywords" content="Community,Release">
 
 
 
@@ -68,7 +69,7 @@
   crossorigin="anonymous"></script>
 
 
-<meta name="description" content="Apache Airflow 3.2.0 introduces Asset partitioning for granular pipeline orchestration, multi-team deployments for enterprise scale, synchronous deadline alert callbacks, and continued progress toward full Task SDK separation." />
+<meta name="description" content="The Common AI Provider adds LLM and AI agent operators to Apache Airflow with 6 operators, 5 toolsets, and 20&#43; model providers in one package." />
 
 
 <script>
@@ -511,27 +512,57 @@
         <div class="tags-container">
             
                 
+                    <a class="tag" href="/blog/tags/community/">Community</a>
+                
+            
+                
                     <a class="tag" href="/blog/tags/release/">Release</a>
                 
             
         </div>
-        <span class="bodytext__medium--brownish-grey">Tue, Apr 7, 2026</span>
+        <span class="bodytext__medium--brownish-grey">Tue, Apr 14, 2026</span>
     </div>
-    <p class="blogpost-content__metadata--title">Apache Airflow 3.2.0: Data-Aware Workflows at Scale</p>
+    <p class="blogpost-content__metadata--title">Introducing the Common AI Provider: LLM and AI Agent Support for Apache Airflow</p>
     <div class="blogpost-content__metadata--author">
         
-          <span class="blogpost-content__metadata--author-name">Rahul Vats</span>
           
-            <a href="https://github.com/vatsrahul1001/" class="blogpost-content__metadata--social-media-icon">
-              <svg xmlns="http://www.w3.org/2000/svg" width="21.737" height="21.2" viewBox="0 0 21.737 21.2">
+            <span class="blogpost-content__metadata--author-name">Kaxil Naik</span>
+            
+              <a href="https://github.com/kaxil/" class="blogpost-content__metadata--social-media-icon">
+                <svg xmlns="http://www.w3.org/2000/svg" width="21.737" height="21.2" viewBox="0 0 21.737 21.2">
     <path id="Path_1378" d="M33.971 1181.31a10.87 10.87 0 0 0-3.435 21.182c.543.1.742-.236.742-.524 0-.258-.009-.941-.015-1.848-3.023.657-3.661-1.457-3.661-1.457a2.876 2.876 0 0 0-1.207-1.59c-.987-.674.075-.661.075-.661a2.283 2.283 0 0 1 1.665 1.12 2.314 2.314 0 0 0 3.163.9 2.322 2.322 0 0 1 .69-1.453c-2.413-.274-4.951-1.207-4.951-5.371a4.2 4.2 0 0 1 1.119-2.917 3.908 3.908 0 0 1 .107-2.876s.913-.292 2.989 1.114a10.3 10.3 0 0 1 5.442 0c2.075-1.406 2.986-1.114 2.986-1.114a3.9 3.9 0 0 1 .1 [...]
 </svg>
 
-            </a>
-          
+              </a>
+            
+            
+              <a href="https://linkedin.com/in/kaxil/" class="blogpost-content__metadata--social-media-icon">
+                <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 21">
+    <g id="Group_1745" data-name="Group 1745" transform="translate(.155 -.055)">
+        <ellipse id="Ellipse_20" cx="10" cy="10.5" fill="#51504f" data-name="Ellipse 20" rx="10" ry="10.5" transform="translate(-.155 .055)"/>
+        <g id="Group_698" data-name="Group 698" transform="translate(5.843 5.004)">
+            <path id="Path_644" d="M-1311.072 1423.962a.9.9 0 0 1-.972.9.888.888 0 0 1-.937-.9.9.9 0 0 1 .961-.9.892.892 0 0 1 .948.9zm-1.862 7.413v-5.8h1.8v5.8z" fill="#fff" data-name="Path 644" transform="translate(1312.981 -1423.061)"/>
+            <path id="Path_645" d="M-1284.253 1448.767c0-.723-.024-1.328-.047-1.85h1.565l.083.806h.035a2.084 2.084 0 0 1 1.791-.937c1.186 0 2.076.795 2.076 2.5v3.428h-1.8v-3.214c0-.747-.261-1.257-.914-1.257a.989.989 0 0 0-.925.676 1.29 1.29 0 0 0-.06.451v3.345h-1.8z" fill="#fff" data-name="Path 645" transform="translate(1287.182 -1444.402)"/>
+        </g>
+    </g>
+</svg>
+
+              </a>
+            
+            <br>
           
-            <a href="https://linkedin.com/in/vats-rahul/" class="blogpost-content__metadata--social-media-icon">
-              <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 21">
+            <span class="blogpost-content__metadata--author-name">Pavan Kumar Gopidesu</span>
+            
+              <a href="https://github.com/gopidesupavan/" class="blogpost-content__metadata--social-media-icon">
+                <svg xmlns="http://www.w3.org/2000/svg" width="21.737" height="21.2" viewBox="0 0 21.737 21.2">
+    <path id="Path_1378" d="M33.971 1181.31a10.87 10.87 0 0 0-3.435 21.182c.543.1.742-.236.742-.524 0-.258-.009-.941-.015-1.848-3.023.657-3.661-1.457-3.661-1.457a2.876 2.876 0 0 0-1.207-1.59c-.987-.674.075-.661.075-.661a2.283 2.283 0 0 1 1.665 1.12 2.314 2.314 0 0 0 3.163.9 2.322 2.322 0 0 1 .69-1.453c-2.413-.274-4.951-1.207-4.951-5.371a4.2 4.2 0 0 1 1.119-2.917 3.908 3.908 0 0 1 .107-2.876s.913-.292 2.989 1.114a10.3 10.3 0 0 1 5.442 0c2.075-1.406 2.986-1.114 2.986-1.114a3.9 3.9 0 0 1 .1 [...]
+</svg>
+
+              </a>
+            
+            
+              <a href="https://linkedin.com/in/pavan-kumar-gopidesu/" class="blogpost-content__metadata--social-media-icon">
+                <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 21">
     <g id="Group_1745" data-name="Group 1745" transform="translate(.155 -.055)">
         <ellipse id="Ellipse_20" cx="10" cy="10.5" fill="#51504f" data-name="Ellipse 20" rx="10" ry="10.5" transform="translate(-.155 .055)"/>
         <g id="Group_698" data-name="Group 698" transform="translate(5.843 5.004)">
@@ -541,215 +572,313 @@
     </g>
 </svg>
 
-            </a>
+              </a>
+            
+            <br>
           
         
       </div>
-    <p class="blogpost-content__metadata--description">Apache Airflow 3.2.0 introduces Asset partitioning for granular pipeline orchestration, multi-team deployments for enterprise scale, synchronous deadline alert callbacks, and continued progress toward full Task SDK separation.</p>
+    <p class="blogpost-content__metadata--description">The Common AI Provider adds LLM and AI agent operators to Apache Airflow with 6 operators, 5 toolsets, and 20&#43; model providers in one package.</p>
 </div>
 <div class="markdown-content">
-    <p>We&rsquo;re proud to announce the release of <strong>Apache Airflow 3.2.0</strong>! Airflow 3.1 puts humans at the center of automated workflows. 3.2 brings that same precision to data: Asset partitioning for granular pipeline orchestration, multi-team deployments for enterprise scale, synchronous deadline alert callbacks, and continued progress toward full Task SDK separation.</p>
-<p><strong>Details</strong>:</p>
-<p>📦 PyPI: <a href="https://pypi.org/project/apache-airflow/3.2.0/">https://pypi.org/project/apache-airflow/3.2.0/</a> <br>
-📚 Docs: <a href="https://airflow.apache.org/docs/apache-airflow/3.2.0/">https://airflow.apache.org/docs/apache-airflow/3.2.0/</a> <br>
-🛠️ Release Notes: <a href="https://airflow.apache.org/docs/apache-airflow/3.2.0/release_notes.html">https://airflow.apache.org/docs/apache-airflow/3.2.0/release_notes.html</a> <br>
-🐳 Docker Image: <code>docker pull apache/airflow:3.2.0</code> <br>
-🚏 Constraints: <a href="https://github.com/apache/airflow/tree/constraints-3.2.0">https://github.com/apache/airflow/tree/constraints-3.2.0</a></p>
-<h1 id="-asset-partitioning-aip-76-only-the-right-work-gets-triggered">🗂️ Asset Partitioning (AIP-76): Only the Right Work Gets Triggered</h1>
-<p>Asset partitioning has been one of the most requested additions to data-aware scheduling. If you work with date-partitioned S3 paths, Hive table partitions, BigQuery partitions, or really any partitioned data store, you&rsquo;ve dealt with this: An upstream task updates one partition, and every downstream Dag fires regardless of which slice actually changed. It&rsquo;s wasteful, and for large deployments it creates real operational noise.</p>
-<p>Asset partitioning in 3.2 makes this granular. Downstream Dags trigger only when the specific partition they care about gets updated. It&rsquo;s the biggest change to data-aware scheduling since Assets were introduced, and it turns partition-driven orchestration into something Airflow handles natively rather than something you work around.</p>
-<p><img src="/blog/airflow-3.2.0/images/asset_partitioning.png" alt="Asset Partitioning"></p>
-<h2 id="key-capabilities">Key Capabilities</h2>
-<ul>
-<li><strong>Partition-driven scheduling</strong>: Dags trigger on specific partition updates, not every asset change</li>
-<li><strong>CronPartitionTimetable</strong>: Schedule Dags against partitions using cron expressions. Also available in the Task SDK</li>
-<li><strong>Backfill for partitioned Dags</strong>: Backfill historical partitions without re-triggering everything downstream (#61464)</li>
-<li><strong>Multi-asset partitions</strong>: A single Dag can listen for partitions across multiple assets, which matters when your downstream work depends on several sources aligning (#60577)</li>
-</ul>
-<p>For more advanced use cases, there are temporal and range partition mappers (#61522, #55247) for mapping time ranges and value ranges to partition keys, a partition key field on Dag run references (#61725) so you can inspect exactly which partition triggered a run, and PartitionedAssetTimetable for full control over how partition events from multiple assets get resolved into a unified trigger.</p>
-<p><strong>Example</strong>: Three upstream ingestion Dags each write to a separate asset on an hourly cadence. The downstream Dag only triggers when all three have updated the same hourly partition. Since the three assets don&rsquo;t share a partition key natively, a mapper resolves them into a common key.</p>
-<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-py" data-lang="py"><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">__future__</span> <span class="kn">import</span> <span class="n">annotations</span>
+    <p>At <a href="https://airflowsummit.org/sessions/2025/airflow-as-an-ai-agents-toolkit-unlocking-1000-integrations-with-mcp/">Airflow Summit 2025</a>, we previewed what native AI integration in Apache Airflow could look like. Today we&rsquo;re shipping it.</p>
+<p><strong><a href="https://pypi.org/project/apache-airflow-providers-common-ai/"><code>apache-airflow-providers-common-ai</code></a> 0.1.0</strong> adds LLM and agent capabilities directly to Airflow. Not a wrapper around another framework, but a provider package that plugs into the orchestrator you already run. It&rsquo;s built on <a href="https://ai.pydantic.dev/">Pydantic AI</a> and supports 20+ model providers (OpenAI, Anthropic, Google, Azure, Bedrock, Ollama, and more) through a s [...]
+<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">pip install <span class="s1">&#39;apache-airflow-providers-common-ai&#39;</span>
+</span></span></code></pre></div><p>Requires Apache Airflow 3.0+.</p>
+<blockquote>
+<p><strong>Note:</strong> This is a 0.x release. We&rsquo;re actively looking for feedback and iterating fast, so breaking changes are possible between minor versions. Try it, tell us what works and what doesn&rsquo;t. Your input directly shapes the API.</p></blockquote>
+<h2 id="by-the-numbers">By the Numbers</h2>
+<table>
+  <thead>
+      <tr>
+          <th></th>
+          <th></th>
+      </tr>
+  </thead>
+  <tbody>
+      <tr>
+          <td><strong>6</strong></td>
+          <td>Operators</td>
+      </tr>
+      <tr>
+          <td><strong>6</strong></td>
+          <td>TaskFlow decorators</td>
+      </tr>
+      <tr>
+          <td><strong>5</strong></td>
+          <td>Toolsets</td>
+      </tr>
+      <tr>
+          <td><strong>4</strong></td>
+          <td>Connection types</td>
+      </tr>
+      <tr>
+          <td><strong>20+</strong></td>
+          <td>Supported model providers via Pydantic AI</td>
+      </tr>
+  </tbody>
+</table>
+<h2 id="the-decorator-suite">The Decorator Suite</h2>
+<p>Every operator has a matching TaskFlow decorator.</p>
+<h3 id="taskllm-single-llm-call"><code>@task.llm</code>: Single LLM Call</h3>
+<p>Send a prompt, get text or structured output back.</p>
+<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">pydantic</span> <span class="kn">import</span> <span class="n">BaseModel</span>
+</span></span><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">airflow.providers.common.compat.sdk</span> <span class="kn">import</span> <span class="n">dag</span><span class="p">,</span> <span class="n">task</span>
 </span></span><span class="line"><span class="cl">
-</span></span><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">airflow.sdk</span> <span class="kn">import</span> <span class="p">(</span>
-</span></span><span class="line"><span class="cl">    <span class="n">DAG</span><span class="p">,</span>
-</span></span><span class="line"><span class="cl">    <span class="n">Asset</span><span class="p">,</span>
-</span></span><span class="line"><span class="cl">    <span class="n">CronPartitionTimetable</span><span class="p">,</span>
-</span></span><span class="line"><span class="cl">    <span class="n">PartitionedAssetTimetable</span><span class="p">,</span>
-</span></span><span class="line"><span class="cl">    <span class="n">StartOfHourMapper</span><span class="p">,</span>
-</span></span><span class="line"><span class="cl">    <span class="n">asset</span><span class="p">,</span>
-</span></span><span class="line"><span class="cl">    <span class="n">task</span><span class="p">,</span>
-</span></span><span class="line"><span class="cl"><span class="p">)</span>
 </span></span><span class="line"><span class="cl">
-</span></span><span class="line"><span class="cl"><span class="n">team_a_player_stats</span> <span class="o">=</span> <span class="n">Asset</span><span class="p">(</span><span class="n">uri</span><span class="o">=</span><span class="s2">&#34;file://incoming/player-stats/team_a.csv&#34;</span><span class="p">,</span> <span class="n">name</span><span class="o">=</span><span class="s2">&#34;team_a_player_stats&#34;</span><span class="p">)</span>
-</span></span><span class="line"><span class="cl"><span class="n">combined_player_stats</span> <span class="o">=</span> <span class="n">Asset</span><span class="p">(</span><span class="n">uri</span><span class="o">=</span><span class="s2">&#34;file://curated/player-stats/combined.csv&#34;</span><span class="p">,</span> <span class="n">name</span><span class="o">=</span><span class="s2">&#34;combined_player_stats&#34;</span><span class="p">)</span>
+</span></span><span class="line"><span class="cl"><span class="nd">@dag</span>
+</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">my_pipeline</span><span class="p">():</span>
+</span></span><span class="line"><span class="cl">    <span class="k">class</span> <span class="nc">Entities</span><span class="p">(</span><span class="n">BaseModel</span><span class="p">):</span>
+</span></span><span class="line"><span class="cl">        <span class="n">names</span><span class="p">:</span> <span class="nb">list</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span>
+</span></span><span class="line"><span class="cl">        <span class="n">locations</span><span class="p">:</span> <span class="nb">list</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span>
 </span></span><span class="line"><span class="cl">
+</span></span><span class="line"><span class="cl">    <span class="nd">@task.llm</span><span class="p">(</span>
+</span></span><span class="line"><span class="cl">        <span class="n">llm_conn_id</span><span class="o">=</span><span class="s2">&#34;my_openai_conn&#34;</span><span class="p">,</span>
+</span></span><span class="line"><span class="cl">        <span class="n">system_prompt</span><span class="o">=</span><span class="s2">&#34;Extract named entities.&#34;</span><span class="p">,</span>
+</span></span><span class="line"><span class="cl">        <span class="n">output_type</span><span class="o">=</span><span class="n">Entities</span><span class="p">,</span>
+</span></span><span class="line"><span class="cl">    <span class="p">)</span>
+</span></span><span class="line"><span class="cl">    <span class="k">def</span> <span class="nf">extract</span><span class="p">(</span><span class="n">text</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
+</span></span><span class="line"><span class="cl">        <span class="k">return</span> <span class="sa">f</span><span class="s2">&#34;Extract entities from: </span><span class="si">{</span><span class="n">text</span><span class="si">}</span><span class="s2">&#34;</span>
 </span></span><span class="line"><span class="cl">
-</span></span><span class="line"><span class="cl"><span class="k">with</span> <span class="n">DAG</span><span class="p">(</span>
-</span></span><span class="line"><span class="cl">    <span class="n">dag_id</span><span class="o">=</span><span class="s2">&#34;ingest_team_a_player_stats&#34;</span><span class="p">,</span>
-</span></span><span class="line"><span class="cl">    <span class="n">schedule</span><span class="o">=</span><span class="n">CronPartitionTimetable</span><span class="p">(</span><span class="s2">&#34;0 * * * *&#34;</span><span class="p">,</span> <span class="n">timezone</span><span class="o">=</span><span class="s2">&#34;UTC&#34;</span><span class="p">),</span>
-</span></span><span class="line"><span class="cl">    <span class="n">tags</span><span class="o">=</span><span class="p">[</span><span class="s2">&#34;player-stats&#34;</span><span class="p">,</span> <span class="s2">&#34;ingestion&#34;</span><span class="p">],</span>
-</span></span><span class="line"><span class="cl"><span class="p">):</span>
+</span></span><span class="line"><span class="cl">    <span class="n">extract</span><span class="p">(</span><span class="s2">&#34;Alice visited Paris and met Bob in London.&#34;</span><span class="p">)</span>
 </span></span><span class="line"><span class="cl">
-</span></span><span class="line"><span class="cl">    <span class="nd">@task</span><span class="p">(</span><span class="n">outlets</span><span class="o">=</span><span class="p">[</span><span class="n">team_a_player_stats</span><span class="p">])</span>
-</span></span><span class="line"><span class="cl">    <span class="k">def</span> <span class="nf">ingest_team_a_stats</span><span class="p">():</span>
-</span></span><span class="line"><span class="cl">        <span class="s2">&#34;&#34;&#34;Materialize Team A player statistics for the current hourly partition.&#34;&#34;&#34;</span>
-</span></span><span class="line"><span class="cl">        <span class="k">pass</span>
 </span></span><span class="line"><span class="cl">
-</span></span><span class="line"><span class="cl">    <span class="n">ingest_team_a_stats</span><span class="p">()</span>
+</span></span><span class="line"><span class="cl"><span class="n">my_pipeline</span><span class="p">()</span>
+</span></span></code></pre></div><p>The LLM returns a typed <code>Entities</code> object, not a string you have to parse. Downstream tasks get structured data through <code>XCom</code>.</p>
+<h3 id="taskagent-multi-step-agent-with-tools"><code>@task.agent</code>: Multi-Step Agent with Tools</h3>
+<p>When the LLM needs to query databases, call APIs, or read files across multiple steps, use <code>@task.agent</code>. The agent picks which tools to call and loops until it has an answer.</p>
+<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">airflow.providers.common.ai.toolsets.sql</span> <span class="kn">import</span> <span class="n">SQLToolset</span>
+</span></span><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">airflow.providers.common.compat.sdk</span> <span class="kn">import</span> <span class="n">dag</span><span class="p">,</span> <span class="n">task</span>
 </span></span><span class="line"><span class="cl">
 </span></span><span class="line"><span class="cl">
-</span></span><span class="line"><span class="cl"><span class="nd">@asset</span><span class="p">(</span><span class="n">schedule</span><span class="o">=</span><span class="n">CronPartitionTimetable</span><span class="p">(</span><span class="s2">&#34;15 * * * *&#34;</span><span class="p">,</span> <span class="n">timezone</span><span class="o">=</span><span class="s2">&#34;UTC&#34;</span><span class="p">))</span>
-</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">team_b_player_stats</span><span class="p">():</span>
-</span></span><span class="line"><span class="cl">    <span class="k">pass</span>
+</span></span><span class="line"><span class="cl"><span class="nd">@dag</span>
+</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">sql_analyst</span><span class="p">():</span>
+</span></span><span class="line"><span class="cl">    <span class="nd">@task.agent</span><span class="p">(</span>
+</span></span><span class="line"><span class="cl">        <span class="n">llm_conn_id</span><span class="o">=</span><span class="s2">&#34;my_openai_conn&#34;</span><span class="p">,</span>
+</span></span><span class="line"><span class="cl">        <span class="n">system_prompt</span><span class="o">=</span><span class="s2">&#34;You are a SQL analyst. Use tools to answer questions with data.&#34;</span><span class="p">,</span>
+</span></span><span class="line"><span class="cl">        <span class="n">toolsets</span><span class="o">=</span><span class="p">[</span>
+</span></span><span class="line"><span class="cl">            <span class="n">SQLToolset</span><span class="p">(</span>
+</span></span><span class="line"><span class="cl">                <span class="n">db_conn_id</span><span class="o">=</span><span class="s2">&#34;postgres_default&#34;</span><span class="p">,</span>
+</span></span><span class="line"><span class="cl">                <span class="n">allowed_tables</span><span class="o">=</span><span class="p">[</span><span class="s2">&#34;customers&#34;</span><span class="p">,</span> <span class="s2">&#34;orders&#34;</span><span class="p">],</span>
+</span></span><span class="line"><span class="cl">                <span class="n">max_rows</span><span class="o">=</span><span class="mi">20</span><span class="p">,</span>
+</span></span><span class="line"><span class="cl">            <span class="p">)</span>
+</span></span><span class="line"><span class="cl">        <span class="p">],</span>
+</span></span><span class="line"><span class="cl">    <span class="p">)</span>
+</span></span><span class="line"><span class="cl">    <span class="k">def</span> <span class="nf">analyze</span><span class="p">(</span><span class="n">question</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
+</span></span><span class="line"><span class="cl">        <span class="k">return</span> <span class="sa">f</span><span class="s2">&#34;Answer this question about our data: </span><span class="si">{</span><span class="n">question</span><span class="si">}</span><span class="s2">&#34;</span>
 </span></span><span class="line"><span class="cl">
+</span></span><span class="line"><span class="cl">    <span class="n">analyze</span><span class="p">(</span><span class="s2">&#34;What are the top 5 customers by order count?&#34;</span><span class="p">)</span>
 </span></span><span class="line"><span class="cl">
-</span></span><span class="line"><span class="cl"><span class="k">with</span> <span class="n">DAG</span><span class="p">(</span>
-</span></span><span class="line"><span class="cl">    <span class="n">dag_id</span><span class="o">=</span><span class="s2">&#34;clean_and_combine_player_stats&#34;</span><span class="p">,</span>
-</span></span><span class="line"><span class="cl">    <span class="n">schedule</span><span class="o">=</span><span class="n">PartitionedAssetTimetable</span><span class="p">(</span>
-</span></span><span class="line"><span class="cl">        <span class="n">assets</span><span class="o">=</span><span class="n">team_a_player_stats</span> <span class="o">&amp;</span> <span class="n">team_b_player_stats</span><span class="p">,</span>
-</span></span><span class="line"><span class="cl">        <span class="n">default_partition_mapper</span><span class="o">=</span><span class="n">StartOfHourMapper</span><span class="p">(),</span>
-</span></span><span class="line"><span class="cl">    <span class="p">),</span>
-</span></span><span class="line"><span class="cl">    <span class="n">catchup</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
-</span></span><span class="line"><span class="cl"><span class="p">):</span>
 </span></span><span class="line"><span class="cl">
-</span></span><span class="line"><span class="cl">    <span class="nd">@task</span><span class="p">(</span><span class="n">outlets</span><span class="o">=</span><span class="p">[</span><span class="n">combined_player_stats</span><span class="p">])</span>
-</span></span><span class="line"><span class="cl">    <span class="k">def</span> <span class="nf">combine_player_stats</span><span class="p">(</span><span class="n">dag_run</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
-</span></span><span class="line"><span class="cl">        <span class="s2">&#34;&#34;&#34;Merge the aligned hourly partitions into a combined dataset.&#34;&#34;&#34;</span>
-</span></span><span class="line"><span class="cl">        <span class="nb">print</span><span class="p">(</span><span class="n">dag_run</span><span class="o">.</span><span class="n">partition_key</span><span class="p">)</span>
+</span></span><span class="line"><span class="cl"><span class="n">sql_analyst</span><span class="p">()</span>
+</span></span></code></pre></div><p>Under the hood, the agent calls <code>list_tables</code>, <code>get_schema</code>, and <code>query</code> on its own until it has the answer.</p>
+<h3 id="taskllm_branch-llm-powered-branching"><code>@task.llm_branch</code>: LLM-Powered Branching</h3>
+<p>The LLM decides which downstream task(s) to run. No string parsing. The LLM returns a constrained enum built from the task&rsquo;s downstream IDs.</p>
+<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="nd">@task.llm_branch</span><span class="p">(</span>
+</span></span><span class="line"><span class="cl">    <span class="n">llm_conn_id</span><span class="o">=</span><span class="s2">&#34;my_openai_conn&#34;</span><span class="p">,</span>
+</span></span><span class="line"><span class="cl">    <span class="n">system_prompt</span><span class="o">=</span><span class="s2">&#34;Classify the support ticket priority.&#34;</span><span class="p">,</span>
+</span></span><span class="line"><span class="cl"><span class="p">)</span>
+</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">route_ticket</span><span class="p">(</span><span class="n">ticket_text</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
+</span></span><span class="line"><span class="cl">    <span class="k">return</span> <span class="sa">f</span><span class="s2">&#34;Classify this ticket: </span><span class="si">{</span><span class="n">ticket_text</span><span class="si">}</span><span class="s2">&#34;</span>
+</span></span></code></pre></div><h3 id="taskllm_sql-text-to-sql-with-safety-rails"><code>@task.llm_sql</code>: Text-to-SQL with Safety Rails</h3>
+<p>Generates SQL from natural language. The operator introspects your database schema and validates the output via AST parsing (<a href="https://github.com/tobymao/sqlglot">sqlglot</a>) before execution.</p>
+<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">airflow.providers.common.compat.sdk</span> <span class="kn">import</span> <span class="n">dag</span><span class="p">,</span> <span class="n">task</span>
 </span></span><span class="line"><span class="cl">
-</span></span><span class="line"><span class="cl">    <span class="n">combine_player_stats</span><span class="p">()</span>
-</span></span></code></pre></div><p>See <a href="https://github.com/apache/airflow/blob/main/airflow-core/src/airflow/example_dags/example_asset_partition.py"><code>example_asset_partition.py</code></a> and the Task SDK API docs for <code>PartitionedAssetTimetable</code> and partition mappers.</p>
-<h1 id="-multi-team-deployments-aip-67-airflow-for-the-enterprise">🏢 Multi-Team Deployments (AIP-67): Airflow for the Enterprise</h1>
-<blockquote>
-<p>⚠️ <strong>Experimental</strong>: Multi-Team support is experimental in Airflow 3.2 and may change in future releases based on user feedback.</p></blockquote>
-<p>Airflow 3.2 introduces multi-team support, allowing organizations to run multiple isolated teams within a single Airflow deployment. Each team can have its own Dags, connections, variables, pools, and executors— enabling true resource and permission isolation without requiring separate Airflow instances per team.</p>
-<p>This is particularly valuable for platform teams that serve multiple data engineering or data science teams from shared infrastructure, while maintaining strong boundaries between teams&rsquo; resources and access.</p>
-<h2 id="key-capabilities-1">Key Capabilities</h2>
-<ul>
-<li><strong>Per-team resource isolation</strong>: Each team has its own Dags, connections, variables, and pools</li>
-<li><strong>Per-team executors</strong>: Different teams can use different executors (e.g. Celery, Kubernetes, Local, AWS ECS, etc.) and configure them separately — #57837, #57910</li>
-<li><strong>Team-scoped authorization</strong>: Keycloak and Simple auth managers support team-scoped access control (#61351, #61861)</li>
-<li><strong>Team-scoped secrets</strong>: Use <code>AIRFLOW_VAR__{TEAM}___{KEY}</code> environment variable or <code>AIRFLOW_CONN__&lt;TEAM&gt;___&lt;CONN_ID&gt;</code> pattern for team-specific secrets (#62588)</li>
-<li><strong>CLI management</strong>: New CLI commands for managing teams (#55283)</li>
-<li><strong>UI team selector</strong>: Team selector in connection, variable, and pool create/edit forms (#60237, #60474, #61082)</li>
-<li><strong>Full API support</strong>: <code>team_name</code> field added to Connection, Variable, and Pool APIs (#59336, #57102, #60952)</li>
-</ul>
-<h2 id="enabling-multi-team">Enabling Multi-Team</h2>
-
-<div class="chem">$$# In airflow.cfg:
-[core]
-multi_team = True
-
-# Or via environment variable:
-export AIRFLOW__CORE__MULTI_TEAM=True$$</div><h1 id="-deadline-alerts-now-with-synchronous-callbacks-aip-86">⏰ Deadline Alerts: Now With Synchronous Callbacks (AIP-86)</h1>
-<blockquote>
-<p>⚠️ <strong>Experimental</strong>: Deadline Alerts are experimental in Airflow 3.2 and may change in future releases based on user feedback.</p></blockquote>
-<p>Building on the Deadline Alerts system introduced in Airflow 3.1, this release adds synchronous callback support. In 3.1, callbacks ran through the triggerer (async only), which limited integration options. Synchronous callbacks execute directly via the executor, with optional targeting of a specific executor via the executor parameter.</p>
-<h2 id="whats-new-in-32">What&rsquo;s New in 3.2</h2>
-<ul>
-<li><strong>SyncCallback support</strong>: Unlike <code>AsyncCallback</code> which runs on the triggerer, <code>SyncCallback</code> executes directly on the worker via the executor, with optional targeting of a specific executor</li>
-<li><strong>Multiple Deadline Alerts per Dag</strong>: Pass a list to the deadline parameter to configure multiple thresholds on a single Dag</li>
-<li><strong>Missed-deadline metadata in Grid API</strong>: Dag run API now includes missed-deadline information for programmatic monitoring</li>
-<li><strong>Improved UX for custom DeadlineReferences</strong>: Cleaner developer experience when defining custom deadline reference points (#57222)</li>
-</ul>
-<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-py" data-lang="py"><span class="line"><span class="cl"><span class="k">with</span> <span class="n">DAG</span><span class="p">(</span>
-</span></span><span class="line"><span class="cl">    <span class="n">dag_id</span><span class="o">=</span><span class="s2">&#34;sync_deadline&#34;</span><span class="p">,</span>
-</span></span><span class="line"><span class="cl">    <span class="n">deadline</span><span class="o">=</span><span class="n">DeadlineAlert</span><span class="p">(</span>
-</span></span><span class="line"><span class="cl">        <span class="n">reference</span><span class="o">=</span><span class="n">DeadlineReference</span><span class="o">.</span><span class="n">FIXED_DATETIME</span><span class="p">(</span><span class="n">datetime</span><span class="p">(</span><span class="mi">1980</span><span class="p">,</span> <span class="mi">8</span><span class="p">,</span> <span class="mi">10</span><span class="p">,</span> <span class="mi">2</span><span class="p">)),</span>
-</span></span><span class="line"><span class="cl">        <span class="n">interval</span><span class="o">=</span><span class="n">timedelta</span><span class="p">(</span><span class="mi">0</span><span class="p">),</span>
-</span></span><span class="line"><span class="cl">        <span class="n">callback</span><span class="o">=</span><span class="n">SyncCallback</span><span class="p">(</span>
-</span></span><span class="line"><span class="cl">            <span class="n">SlackWebhookNotifier</span><span class="p">,</span>
-</span></span><span class="line"><span class="cl">            <span class="p">{</span><span class="s2">&#34;text&#34;</span><span class="p">:</span> <span class="s2">&#34;Sync Callback; Alert should trigger immediately!&#34;</span><span class="p">},</span>
-</span></span><span class="line"><span class="cl">        <span class="p">)</span>
+</span></span><span class="line"><span class="cl">
+</span></span><span class="line"><span class="cl"><span class="nd">@dag</span>
+</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">sql_generator</span><span class="p">():</span>
+</span></span><span class="line"><span class="cl">    <span class="nd">@task.llm_sql</span><span class="p">(</span>
+</span></span><span class="line"><span class="cl">        <span class="n">llm_conn_id</span><span class="o">=</span><span class="s2">&#34;my_openai_conn&#34;</span><span class="p">,</span>
+</span></span><span class="line"><span class="cl">        <span class="n">db_conn_id</span><span class="o">=</span><span class="s2">&#34;postgres_default&#34;</span><span class="p">,</span>
+</span></span><span class="line"><span class="cl">        <span class="n">table_names</span><span class="o">=</span><span class="p">[</span><span class="s2">&#34;orders&#34;</span><span class="p">,</span> <span class="s2">&#34;customers&#34;</span><span class="p">],</span>
+</span></span><span class="line"><span class="cl">        <span class="n">dialect</span><span class="o">=</span><span class="s2">&#34;postgres&#34;</span><span class="p">,</span>
 </span></span><span class="line"><span class="cl">    <span class="p">)</span>
-</span></span><span class="line"><span class="cl"><span class="p">):</span>
-</span></span><span class="line"><span class="cl">    <span class="n">EmptyOperator</span><span class="p">(</span><span class="n">task_id</span><span class="o">=</span><span class="s1">&#39;empty_task&#39;</span><span class="p">)</span>
-</span></span></code></pre></div><h1 id="-ui-enhancements">🖥️ UI Enhancements</h1>
-<ul>
-<li><strong>HITL Approval History</strong>: The Human-in-the-Loop approval interface now shows the complete audit trail of approvals and rejections for any task. (#56760, #55952)</li>
-<li><strong>XCom Management</strong>: You can now add, edit, and delete XCom values directly from the UI. (#58921)</li>
-<li><strong>Segmented state bar</strong>: Collapsed task groups and mapped tasks now show a segmented state bar for at-a-glance status (#61854)</li>
-<li><strong>Unified tooltips</strong>: Grid and Graph view tooltips now show dates, duration, and child states (#62119)</li>
-<li><strong>Filename in Dag Code tab</strong>: File identification now shown in the Code tab (#60759)</li>
-<li><strong>Copy button for logs</strong>: One-click log copying (#61185)</li>
-<li><strong>Date range filter</strong>: Filter Dag executions by date range (#60772)</li>
-<li><strong>Task upstream/downstream filter</strong>: Filter by upstream or downstream tasks in Graph and Grid views (#57237)</li>
-<li><strong>Data redaction</strong>: Sensitive fields are now redacted in the UI and Public API (#59873)</li>
-<li><strong>Custom theme support</strong>: <code>globalCss</code> and theme config for white-label/custom deployments (#61161, #58411)</li>
-<li><strong>Inherit core UI theme in React plugins</strong>: Plugin UIs now automatically match the core Airflow theme (#60256)</li>
-<li><strong>Task display names in Gantt</strong>: <code>task_display_name</code> shown for better readability (#61438)</li>
-</ul>
-<h1 id="-performance-improvements">🚀 Performance Improvements</h1>
-<p><strong>Rendered Task Instance Fields Cleanup: ~42x Faster.</strong> The cleanup job for rendered task instance fields has been rewritten and is roughly 42 times faster for Dags with many mapped tasks. Retention is now based on the N most recent Dag runs rather than N most recent task executions, which is both more intuitive and dramatically more performant. Config renamed: <code>max_num_rendered_ti_fields_per_task</code> → <code>num_dag_runs_to_retain_rendered_fields</code> (old name [...]
-<p><strong>Scheduler Improvements.</strong> For large-scale deployments, 3.2 addresses several known bottlenecks:</p>
-<ul>
-<li>The scheduler no longer loads all TaskInstances into memory, preventing memory spikes on large deployments (#60956)</li>
-<li>Faster task dequeuing loop (#61376)</li>
-<li>Queue query now enforces <code>max_active_tasks</code> directly, preventing over-queueing (#54103)</li>
-</ul>
-<p><strong>API Server Improvements:</strong></p>
-<ul>
-<li>Eliminated SerializedDag loads on task start, reducing memory usage (#60803)</li>
-<li><code>serialized_dag</code> data column now uses JSONB on PostgreSQL (#55979)</li>
-</ul>
-<h1 id="-task-sdk-evolution--developer-experience">🔧 Task SDK Evolution &amp; Developer Experience</h1>
-<h2 id="task-sdk-decoupling-continues">Task SDK Decoupling Continues</h2>
-<p>Airflow 3.2 continues moving components from <code>airflow-core</code> into the Task SDK, progressing toward full client-server separation. This enables Dag authors to independently upgrade the Task SDK without requiring Airflow Core upgrades, reducing coordination overhead between Dag authors and Ops teams.</p>
-<p>Modules moved to Task SDK in this release (old import paths still work with deprecation warnings):</p>
-<ul>
-<li><strong>Exceptions</strong>: <code>AirflowSkipException</code>, <code>TaskDeferred</code>, etc. → <code>airflow.sdk.exceptions</code> (#59780)</li>
-<li><strong>Serde</strong>: <code>airflow.serialization.serde</code> → <code>airflow.sdk.serde</code>; serializers → <code>airflow.sdk.serde.serializers.*</code> (#58900)</li>
-<li><strong>SkipMixin / BranchMixIn</strong>: Moved to Task SDK; existing imports work via <code>common-compat</code> (#62749, #62776)</li>
-<li><strong>Lineage module</strong>: Moved to Task SDK for client-server separation (#60968, #61157)</li>
-<li><strong>Listeners module</strong>: Moved to shared library (#59883)</li>
-<li><strong>XCom API</strong>: Decoupled from <code>XComEncoder</code> (#58900)</li>
-</ul>
-<h2 id="pythonoperator-async-support">PythonOperator Async Support</h2>
-<p><code>PythonOperator</code> now supports async callables. You can pass an async function as the <code>python_callable</code> and the operator will correctly await it, enabling async I/O patterns without needing a custom operator. (#60268)</p>
-<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-py" data-lang="py"><span class="line"><span class="cl"><span class="nd">@task</span><span class="p">(</span><span class="n">show_return_value_in_logs</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</span></span><span class="line"><span class="cl"><span class="k">async</span> <span class="k">def</span> <span class="nf">load_xml_files</span><span class="p">(</span><span class="n">files</span><span class="p">):</span>
-</span></span><span class="line"><span class="cl">    <span class="kn">import</span> <span class="nn">asyncio</span>
-</span></span><span class="line"><span class="cl">    <span class="kn">from</span> <span class="nn">io</span> <span class="kn">import</span> <span class="n">BytesIO</span>
-</span></span><span class="line"><span class="cl">    <span class="kn">from</span> <span class="nn">more_itertools</span> <span class="kn">import</span> <span class="n">chunked</span>
-</span></span><span class="line"><span class="cl">    <span class="kn">from</span> <span class="nn">os</span> <span class="kn">import</span> <span class="n">cpu_count</span>
-</span></span><span class="line"><span class="cl">    <span class="kn">from</span> <span class="nn">tenacity</span> <span class="kn">import</span> <span class="n">retry</span><span class="p">,</span> <span class="n">stop_after_attempt</span><span class="p">,</span> <span class="n">wait_fixed</span>
+</span></span><span class="line"><span class="cl">    <span class="k">def</span> <span class="nf">build_query</span><span class="p">(</span><span class="n">ds</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
+</span></span><span class="line"><span class="cl">        <span class="k">return</span> <span class="sa">f</span><span class="s2">&#34;Find customers who placed no orders after </span><span class="si">{</span><span class="n">ds</span><span class="si">}</span><span class="s2">&#34;</span>
 </span></span><span class="line"><span class="cl">
-</span></span><span class="line"><span class="cl">    <span class="kn">from</span> <span class="nn">airflow.providers.sftp.hooks.sftp</span> <span class="kn">import</span> <span class="n">SFTPClientPool</span>
+</span></span><span class="line"><span class="cl">    <span class="n">build_query</span><span class="p">()</span>
 </span></span><span class="line"><span class="cl">
-</span></span><span class="line"><span class="cl">    <span class="nb">print</span><span class="p">(</span><span class="s2">&#34;number of files:&#34;</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">files</span><span class="p">))</span>
 </span></span><span class="line"><span class="cl">
-</span></span><span class="line"><span class="cl">    <span class="k">async</span> <span class="k">with</span> <span class="n">SFTPClientPool</span><span class="p">(</span><span class="n">sftp_conn_id</span><span class="o">=</span><span class="n">sftp_conn</span><span class="p">,</span> <span class="n">pool_size</span><span class="o">=</span><span class="n">cpu_count</span><span class="p">())</span> <span class="k">as</span> <span class="n">pool</span><span class="p">:</span>
-</span></span><span class="line"><span class="cl">        <span class="nd">@retry</span><span class="p">(</span><span class="n">stop</span><span class="o">=</span><span class="n">stop_after_attempt</span><span class="p">(</span><span class="mi">3</span><span class="p">),</span> <span class="n">wait</span><span class="o">=</span><span class="n">wait_fixed</span><span class="p">(</span><span class="mi">5</span><span class="p">))</span>
-</span></span><span class="line"><span class="cl">        <span class="k">async</span> <span class="k">def</span> <span class="nf">download_file</span><span class="p">(</span><span class="n">file</span><span class="p">):</span>
-</span></span><span class="line"><span class="cl">            <span class="k">async</span> <span class="k">with</span> <span class="n">pool</span><span class="o">.</span><span class="n">get_sftp_client</span><span class="p">()</span> <span class="k">as</span> <span class="n">sftp</span><span class="p">:</span>
-</span></span><span class="line"><span class="cl">                <span class="nb">print</span><span class="p">(</span><span class="s2">&#34;downloading:&#34;</span><span class="p">,</span> <span class="n">file</span><span class="p">)</span>
-</span></span><span class="line"><span class="cl">                <span class="n">buffer</span> <span class="o">=</span> <span class="n">BytesIO</span><span class="p">()</span>
-</span></span><span class="line"><span class="cl">                <span class="k">async</span> <span class="k">with</span> <span class="n">sftp</span><span class="o">.</span><span class="n">open</span><span class="p">(</span><span class="n">file</span><span class="p">,</span> <span class="n">encoding</span><span class="o">=</span><span class="n">xml_encoding</span><span class="p">)</span> <span class="k">as</span> <span class="n">remote_file</span><span class="p">:</span>
-</span></span><span class="line"><span class="cl">                    <span class="n">data</span> <span class="o">=</span> <span class="k">await</span> <span class="n">remote_file</span><span class="o">.</span><span class="n">read</span><span class="p">()</span>
-</span></span><span class="line"><span class="cl">                    <span class="n">buffer</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">data</span><span class="o">.</span><span class="n">encode</span><span class="p">(</span><span class="n">xml_encoding</span><span class="p">))</span>
-</span></span><span class="line"><span class="cl">                    <span class="n">buffer</span><span class="o">.</span><span class="n">seek</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
-</span></span><span class="line"><span class="cl">                <span class="k">return</span> <span class="n">buffer</span>
+</span></span><span class="line"><span class="cl"><span class="n">sql_generator</span><span class="p">()</span>
+</span></span></code></pre></div><h3 id="taskllm_file_analysis-analyze-files-with-llms"><code>@task.llm_file_analysis</code>: Analyze Files with LLMs</h3>
+<p>Point it at files in object storage (S3, GCS, local) and let the LLM analyze them. Supports CSV, Parquet, Avro, JSON, and images (multimodal).</p>
+<p><img src="/blog/common-ai-provider/images/file-analysis-csv.png" alt="LLM analyzing a CSV file — identifying columns, counting rows, computing totals"></p>
+<p>It also handles multimodal input. Set <code>multi_modal=True</code> and the operator sends images and PDFs as binary attachments to the LLM:</p>
+<p><img src="images/file-analysis-image.png" alt="Multimodal file analysis — LLM describing components from an architecture diagram image"></p>
+<h3 id="taskllm_schema_compare-cross-database-schema-drift"><code>@task.llm_schema_compare</code>: Cross-Database Schema Drift</h3>
+<p>Compares schemas across databases and returns structured <code>SchemaMismatch</code> results with severity levels. Handles the type mapping headaches across systems (<code>varchar(n)</code> vs <code>string</code>, <code>timestamp</code> vs <code>timestamptz</code>).</p>
+<h2 id="350-hooks-as-ai-tools">350+ Hooks as AI Tools</h2>
+<p>Airflow already has 350+ provider hooks with typed methods, docstrings, and managed credentials. <code>S3Hook</code>, <code>GCSHook</code>, <code>SlackHook</code>, <code>SnowflakeHook</code>, <code>DbApiHook</code>. They all authenticate through Airflow&rsquo;s secret backend, and they all already work.</p>
+<p>Rather than setting up separate MCP servers with their own auth for each integration, <code>HookToolset</code> lets agents call hook methods directly using the connections you&rsquo;ve already configured.</p>
+<p><code>HookToolset</code> turns any of them into AI agent tools:</p>
+<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">airflow.providers.amazon.aws.hooks.s3</span> <span class="kn">import</span> <span class="n">S3Hook</span>
+</span></span><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">airflow.providers.common.ai.toolsets.hook</span> <span class="kn">import</span> <span class="n">HookToolset</span>
 </span></span><span class="line"><span class="cl">
-</span></span><span class="line"><span class="cl">        <span class="k">for</span> <span class="n">batch</span> <span class="ow">in</span> <span class="n">chunked</span><span class="p">(</span><span class="n">files</span><span class="p">,</span> <span class="n">cpu_count</span><span class="p">()</span> <span class="o">*</span> <span class="mi">2</span><span class="p">):</span>
-</span></span><span class="line"><span class="cl">            <span class="n">tasks</span> <span class="o">=</span> <span class="p">[</span><span class="n">asyncio</span><span class="o">.</span><span class="n">create_task</span><span class="p">(</span><span class="n">download_file</span><span class="p">(</span><span class="n">f</span><span class="p">))</span> <span class="k">for</span> <span class="n">f</span> <span class="ow">in</span> <span class="n">batch</span><span class="p">]</span>
+</span></span><span class="line"><span class="cl"><span class="c1"># S3Hook methods become agent tools: the agent can list, read, and check S3 objects</span>
+</span></span><span class="line"><span class="cl"><span class="n">HookToolset</span><span class="p">(</span>
+</span></span><span class="line"><span class="cl">    <span class="n">S3Hook</span><span class="p">(</span><span class="n">aws_conn_id</span><span class="o">=</span><span class="s2">&#34;aws_default&#34;</span><span class="p">),</span>
+</span></span><span class="line"><span class="cl">    <span class="n">allowed_methods</span><span class="o">=</span><span class="p">[</span><span class="s2">&#34;list_keys&#34;</span><span class="p">,</span> <span class="s2">&#34;read_key&#34;</span><span class="p">,</span> <span class="s2">&#34;check_for_key&#34;</span><span class="p">],</span>
+</span></span><span class="line"><span class="cl">    <span class="n">tool_name_prefix</span><span class="o">=</span><span class="s2">&#34;s3_&#34;</span><span class="p">,</span>
+</span></span><span class="line"><span class="cl"><span class="p">)</span>
+</span></span></code></pre></div><p>The introspection engine builds JSON Schema from method signatures and enriches tool descriptions from docstrings (Sphinx and Google style). You explicitly declare which methods to expose. No auto-discovery, no unintended access. The agent sees <code>s3_list_keys</code>, <code>s3_read_key</code>, <code>s3_check_for_key</code> as typed tools with parameter descriptions pulled straight from the hook.</p>
+<p>This works with <em>any</em> hook. Want your agent to send Slack messages? <code>HookToolset(SlackHook(...), allowed_methods=[&quot;send_message&quot;])</code>. Query Snowflake? Use <code>SQLToolset</code> with a Snowflake connection. Hit an internal API? <code>HookToolset(HttpHook(...), allowed_methods=[&quot;run&quot;])</code>.</p>
+<p>You can also compose multiple toolsets in a single agent. Give it <code>SQLToolset</code> for database access <em>and</em> <code>HookToolset</code> for API calls, and the agent picks the right tool for each step.</p>
+<p>Four toolsets ship with the provider:</p>
+<table>
+  <thead>
+      <tr>
+          <th>Toolset</th>
+          <th>What it does</th>
+      </tr>
+  </thead>
+  <tbody>
+      <tr>
+          <td><strong><code>SQLToolset</code></strong></td>
+          <td><code>list_tables</code>, <code>get_schema</code>, <code>query</code>, <code>check_query</code> for any <code>DbApiHook</code> database</td>
+      </tr>
+      <tr>
+          <td><strong><code>HookToolset</code></strong></td>
+          <td>Wraps any Airflow hook&rsquo;s methods as agent tools</td>
+      </tr>
+      <tr>
+          <td><strong><code>MCPToolset</code></strong></td>
+          <td>Connects to external <a href="https://modelcontextprotocol.io/">MCP</a> servers via Airflow Connections</td>
+      </tr>
+      <tr>
+          <td><strong><code>DataFusionToolset</code></strong></td>
+          <td>SQL over files in object storage (S3, other to come soon) via Apache DataFusion</td>
+      </tr>
+  </tbody>
+</table>
+<p>All toolsets resolve connections lazily through <code>BaseHook.get_connection()</code>. No hardcoded keys.</p>
+<p>Here&rsquo;s what an agent SQL analysis looks like in the Airflow task logs. The agent explored the schema, wrote queries, and produced a structured summary:</p>
+<p><img src="/blog/common-ai-provider/images/agent-sql-logs.png" alt="Agent SQL analysis showing tool calls and structured output in Airflow task logs"></p>
+<h2 id="not-locked-into-decorators">Not Locked Into Decorators</h2>
+<p>You don&rsquo;t have to use <code>@task.agent</code> or the operator classes. Pydantic AI works directly from a plain <code>@task</code>, <code>PythonOperator</code>, or any custom operator:</p>
+<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">pydantic_ai</span> <span class="kn">import</span> <span class="n">Agent</span>
+</span></span><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">airflow.providers.common.ai.hooks.pydantic_ai</span> <span class="kn">import</span> <span class="n">PydanticAIHook</span>
+</span></span><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">airflow.providers.common.ai.toolsets.sql</span> <span class="kn">import</span> <span class="n">SQLToolset</span>
+</span></span><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">airflow.providers.common.compat.sdk</span> <span class="kn">import</span> <span class="n">dag</span><span class="p">,</span> <span class="n">task</span>
+</span></span><span class="line"><span class="cl">
+</span></span><span class="line"><span class="cl">
+</span></span><span class="line"><span class="cl"><span class="nd">@dag</span>
+</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">raw_pydantic_ai</span><span class="p">():</span>
+</span></span><span class="line"><span class="cl">    <span class="nd">@task</span>
+</span></span><span class="line"><span class="cl">    <span class="k">def</span> <span class="nf">multi_agent</span><span class="p">():</span>
+</span></span><span class="line"><span class="cl">        <span class="n">hook</span> <span class="o">=</span> <span class="n">PydanticAIHook</span><span class="p">(</span><span class="n">llm_conn_id</span><span class="o">=</span><span class="s2">&#34;my_openai_conn&#34;</span><span class="p">)</span>
+</span></span><span class="line"><span class="cl">        <span class="n">model</span> <span class="o">=</span> <span class="n">hook</span><span class="o">.</span><span class="n">get_conn</span><span class="p">()</span>
+</span></span><span class="line"><span class="cl">
+</span></span><span class="line"><span class="cl">        <span class="n">agent</span> <span class="o">=</span> <span class="n">Agent</span><span class="p">(</span>
+</span></span><span class="line"><span class="cl">            <span class="n">model</span><span class="p">,</span>
+</span></span><span class="line"><span class="cl">            <span class="n">system_prompt</span><span class="o">=</span><span class="s2">&#34;You are a SQL analyst.&#34;</span><span class="p">,</span>
+</span></span><span class="line"><span class="cl">            <span class="n">toolsets</span><span class="o">=</span><span class="p">[</span><span class="n">SQLToolset</span><span class="p">(</span><span class="n">db_conn_id</span><span class="o">=</span><span class="s2">&#34;postgres_default&#34;</span><span class="p">)],</span>
+</span></span><span class="line"><span class="cl">        <span class="p">)</span>
+</span></span><span class="line"><span class="cl">        <span class="n">result</span> <span class="o">=</span> <span class="n">agent</span><span class="o">.</span><span class="n">run_sync</span><span class="p">(</span><span class="s2">&#34;What are the top products by revenue?&#34;</span><span class="p">)</span>
+</span></span><span class="line"><span class="cl">        <span class="k">return</span> <span class="n">result</span><span class="o">.</span><span class="n">output</span>
 </span></span><span class="line"><span class="cl">
-</span></span><span class="line"><span class="cl">            <span class="c1"># Wait for this batch to finish before starting the next</span>
-</span></span><span class="line"><span class="cl">            <span class="k">for</span> <span class="n">task</span> <span class="ow">in</span> <span class="n">asyncio</span><span class="o">.</span><span class="n">as_completed</span><span class="p">(</span><span class="n">tasks</span><span class="p">):</span>
-</span></span><span class="line"><span class="cl">                <span class="n">result</span> <span class="o">=</span> <span class="k">await</span> <span class="n">task</span>
-</span></span><span class="line"><span class="cl">                <span class="c1"># Do something with result or accumulate it and return it as an XCom</span>
-</span></span></code></pre></div><h1 id="updated-securiy-model">Updated securiy model</h1>
-<p>We are working on improving isolation and improving security of Airflow deployments and in order to make our users better informed of what expectations they should have for Airflow security, we updated the security model to reflect changes implemented in Airflow 3.2.0 and explain future improvements that we work on in this area. See more:  <a href="https://airflow.apache.org/docs/apache-airflow/stable/security/security_model.html">Airflow Security Model</a>.</p>
-<h1 id="-community-appreciation">🙏 Community Appreciation</h1>
-<p>This release represents the collaborative effort of hundreds of contributors from around the world. Special thanks to our release manager and all the developers, documentarians, testers, and community members who made Airflow 3.2.0 possible.</p>
-<p>Thanks to contributors like you, the Airflow project continues to thrive. Whether you&rsquo;re filing issues, submitting PRs, improving documentation, or helping others in the community, every contribution matters.</p>
-<h1 id="-get-involved">🔗 Get Involved</h1>
+</span></span><span class="line"><span class="cl">    <span class="n">multi_agent</span><span class="p">()</span>
+</span></span><span class="line"><span class="cl">
+</span></span><span class="line"><span class="cl">
+</span></span><span class="line"><span class="cl"><span class="n">raw_pydantic_ai</span><span class="p">()</span>
+</span></span></code></pre></div><p>This gives you full control: run multiple agent calls in one task, swap models at runtime, combine outputs from different agents before returning.</p>
+<p><code>@task.agent</code> adds guardrails on top (durable execution, HITL review, automatic tool logging). Raw Pydantic AI skips those. Both paths use the same toolsets.</p>
+<h2 id="human-in-the-loop">Human-in-the-Loop</h2>
+<p>Not every LLM output should go straight to production. The provider has two levels of human oversight.</p>
+<p><strong>Approval gates</strong>: the task defers after generating output and waits for a human to approve before downstream tasks run:</p>
+<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="n">LLMOperator</span><span class="p">(</span>
+</span></span><span class="line"><span class="cl">    <span class="n">task_id</span><span class="o">=</span><span class="s2">&#34;summarize_report&#34;</span><span class="p">,</span>
+</span></span><span class="line"><span class="cl">    <span class="n">prompt</span><span class="o">=</span><span class="s2">&#34;Summarize the quarterly financial report for stakeholders.&#34;</span><span class="p">,</span>
+</span></span><span class="line"><span class="cl">    <span class="n">llm_conn_id</span><span class="o">=</span><span class="s2">&#34;my_openai_conn&#34;</span><span class="p">,</span>
+</span></span><span class="line"><span class="cl">    <span class="n">require_approval</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
+</span></span><span class="line"><span class="cl">    <span class="n">approval_timeout</span><span class="o">=</span><span class="n">timedelta</span><span class="p">(</span><span class="n">hours</span><span class="o">=</span><span class="mi">24</span><span class="p">),</span>
+</span></span><span class="line"><span class="cl">    <span class="n">allow_modifications</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>  <span class="c1"># reviewer can edit the output</span>
+</span></span><span class="line"><span class="cl"><span class="p">)</span>
+</span></span></code></pre></div><p><strong>Iterative review</strong>: a human reviews agent output, approves, rejects, or requests changes, and the agent revises in a loop:</p>
+<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="n">AgentOperator</span><span class="p">(</span>
+</span></span><span class="line"><span class="cl">    <span class="n">task_id</span><span class="o">=</span><span class="s2">&#34;analyst&#34;</span><span class="p">,</span>
+</span></span><span class="line"><span class="cl">    <span class="n">prompt</span><span class="o">=</span><span class="s2">&#34;Summarize the Q4 sales report.&#34;</span><span class="p">,</span>
+</span></span><span class="line"><span class="cl">    <span class="n">llm_conn_id</span><span class="o">=</span><span class="s2">&#34;my_openai_conn&#34;</span><span class="p">,</span>
+</span></span><span class="line"><span class="cl">    <span class="n">enable_hitl_review</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
+</span></span><span class="line"><span class="cl">    <span class="n">max_hitl_iterations</span><span class="o">=</span><span class="mi">5</span><span class="p">,</span>
+</span></span><span class="line"><span class="cl">    <span class="n">hitl_timeout</span><span class="o">=</span><span class="n">timedelta</span><span class="p">(</span><span class="n">minutes</span><span class="o">=</span><span class="mi">30</span><span class="p">),</span>
+</span></span><span class="line"><span class="cl"><span class="p">)</span>
+</span></span></code></pre></div><p>A built-in plugin adds the review UI to the Airflow web interface.</p>
+<p><img src="/blog/common-ai-provider/images/hitl-approval.png" alt="Human-in-the-loop approval interface showing the generated output with approve, reject, and modify options"></p>
+<p><img src="images/HITLReviewTab.gif" alt="Human-in-the-loop review tab in the task instance page"></p>
+<h2 id="durable-execution">Durable Execution</h2>
+<p>LLM agent calls are expensive. When a 10-step agent task fails on step 8, a retry shouldn&rsquo;t re-run all 10 steps and double your API bill. A single parameter fixes this:</p>
+<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="n">AgentOperator</span><span class="p">(</span>
+</span></span><span class="line"><span class="cl">    <span class="n">task_id</span><span class="o">=</span><span class="s2">&#34;analyst&#34;</span><span class="p">,</span>
+</span></span><span class="line"><span class="cl">    <span class="n">prompt</span><span class="o">=</span><span class="s2">&#34;Analyze quarterly trends across all regions.&#34;</span><span class="p">,</span>
+</span></span><span class="line"><span class="cl">    <span class="n">llm_conn_id</span><span class="o">=</span><span class="s2">&#34;my_openai_conn&#34;</span><span class="p">,</span>
+</span></span><span class="line"><span class="cl">    <span class="n">toolsets</span><span class="o">=</span><span class="p">[</span><span class="n">SQLToolset</span><span class="p">(</span><span class="n">db_conn_id</span><span class="o">=</span><span class="s2">&#34;postgres_default&#34;</span><span class="p">)],</span>
+</span></span><span class="line"><span class="cl">    <span class="n">durable</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
+</span></span><span class="line"><span class="cl"><span class="p">)</span>
+</span></span></code></pre></div><p>With <code>durable=True</code>, each model response and tool result is cached to <code>ObjectStorage</code> as the agent runs. On retry, cached steps replay instantly: no repeated LLM calls, no repeated tool execution. The cache is deleted after successful completion.</p>
+<p>Say the agent ran <code>list_tables</code>, <code>get_schema</code>, <code>get_schema</code>, <code>query</code>, then hit a transient failure:</p>
+<p><img src="/blog/common-ai-provider/images/durable-attempt-1.png" alt="Attempt 1: agent runs tool calls then fails on a transient error"></p>
+<p>On retry, those 4 tool calls and 4 model responses replay from cache in milliseconds. The agent picks up exactly where it left off:</p>
+<p><img src="/blog/common-ai-provider/images/durable-attempt-2.png" alt="Attempt 2: cached steps replayed instantly, agent continues from where it left off"></p>
+<p>The summary line tells you exactly what happened:</p>
+<p><img src="/blog/common-ai-provider/images/durable-summary.png" alt="Durable execution summary showing replayed vs fresh steps"></p>
+<p>Works with any <code>ObjectStorage</code> backend (local filesystem for dev, S3/GCS for production) and any toolset.</p>
+<h2 id="any-model-one-interface">Any Model, One Interface</h2>
+<p>Configure your LLM connection once. Switch providers by changing the connection, not the DAG code.</p>
+<p>Four connection types:</p>
+<table>
+  <thead>
+      <tr>
+          <th>Connection Type</th>
+          <th>Provider</th>
+          <th>Model Format</th>
+      </tr>
+  </thead>
+  <tbody>
+      <tr>
+          <td><code>pydanticai</code></td>
+          <td>OpenAI, Anthropic, Groq, Mistral, Ollama, vLLM, and others</td>
+          <td><code>openai:gpt-5</code>, <code>anthropic:claude-sonnet-4-20250514</code></td>
+      </tr>
+      <tr>
+          <td><code>pydanticai-azure</code></td>
+          <td>Azure OpenAI</td>
+          <td><code>azure:gpt-4o</code></td>
+      </tr>
+      <tr>
+          <td><code>pydanticai-bedrock</code></td>
+          <td>AWS Bedrock</td>
+          <td><code>bedrock:us.anthropic.claude-opus-4-5</code></td>
+      </tr>
+      <tr>
+          <td><code>pydanticai-vertex</code></td>
+          <td>Google Vertex AI</td>
+          <td><code>google-vertex:gemini-2.0-flash</code></td>
+      </tr>
+  </tbody>
+</table>
+<p>Each type has dedicated UI fields in Airflow&rsquo;s connection form (API keys, endpoints, region, project, service account info), all stored in Airflow&rsquo;s secret backend.</p>
+<p>Under the hood, the agent runtime is <a href="https://ai.pydantic.dev/">Pydantic AI</a>, which handles structured output, tool calling, and conversation management with proper typing.</p>
+<h2 id="full-observability">Full Observability</h2>
+<p>Every LLM task logs token usage and tool calls to Airflow&rsquo;s metadata DB. The full conversation history is stored too, so you can audit what the agent did after the fact.</p>
+<p><code>AgentOperator</code> enables tool logging by default. Each tool call appears at INFO level with execution time, arguments at DEBUG level.</p>
+<p><img src="/blog/common-ai-provider/images/tool-logging.png" alt="Tool call logging showing collapsible log groups with timing in the Airflow UI"></p>
+<h2 id="whats-next">What&rsquo;s Next</h2>
+<p>These are directions we&rsquo;re exploring, not commitments. What actually ships depends on what the community needs. Tell us what matters to you.</p>
 <ul>
-<li><strong>Try the Release</strong>: Upgrade your development environment and explore the new features</li>
-<li><strong>Join the Conversation</strong>: Connect with us on <a href="https://s.apache.org/airflow-slack">Slack</a> and the <a href="https://airflow.apache.org/community/">dev mailing list</a></li>
-<li><strong>Contribute</strong>: Check out our <a href="https://github.com/apache/airflow/blob/main/contributing-docs/README.rst">contribution guide</a></li>
-<li><strong>Provide Feedback</strong>: Share your experiences and suggestions on <a href="https://github.com/apache/airflow">GitHub</a></li>
+<li><strong>Google ADK backend</strong>: <code>AgentOperator</code> with Google&rsquo;s Agent Development Kit as an alternative to Pydantic AI, with session management, ADK callbacks, and multi-agent workflows</li>
+<li><strong>Asset integration</strong>: automatic schema context from Airflow Assets, lineage tracking for LLM-generated queries</li>
+<li><strong>Cost controls (AIBudget)</strong>: token limits and cost caps per task, DAG, or team</li>
+<li><strong>Multi-agent orchestration</strong>: patterns for composing agents across tasks</li>
+<li><strong>Model evaluation</strong>: integration with pydantic-evals for testing LLM behavior</li>
+</ul>
+<h2 id="get-involved">Get Involved</h2>
+<ul>
+<li><a href="https://pypi.org/project/apache-airflow-providers-common-ai/">Install the provider</a> and try it out</li>
+<li><a href="https://airflow.apache.org/registry/providers/common-ai/">Browse the provider on the Airflow Registry</a> for the full module listing</li>
+<li><a href="https://airflow.apache.org/docs/apache-airflow-providers-common-ai/">Read the docs</a> for operator guides, toolset reference, and connection setup</li>
+<li><strong>Give us feedback</strong>: open an <a href="https://github.com/apache/airflow/issues">issue</a>, start a thread on <a href="https://s.apache.org/airflow-slack">Airflow Slack</a>, or post to the <a href="https://airflow.apache.org/community/">dev mailing list</a>. What hooks should we add built-in toolsets for? What&rsquo;s missing?</li>
+<li>The code lives in <a href="https://github.com/apache/airflow/tree/main/providers/common/ai"><code>providers/common/ai/</code></a> in the main Airflow repo</li>
 </ul>
-<p>Apache Airflow 3.2.0 marks a new chapter in data-aware, partition-driven workflow orchestration. We can&rsquo;t wait to see what you build with it!</p>
 
 </div>
 
@@ -791,7 +920,7 @@ export AIRFLOW__CORE__MULTI_TEAM=True$$</div><h1 id="-deadline-alerts-now-with-s
         <div class="no-width-restriction no-desktop">
             <ul class="list-unstyled d-flex justify-content-between align-items-center mb-0 pt-5">
   <li>
-    <a href="/blog/airflow-registry/" aria-label="Previous - Introducing the Apache Airflow Registry" class="btn btn-primary"><span class="me-1">←</span>Previous</a>
+    <a href="/blog/airflow-3.2.0/" aria-label="Previous - Apache Airflow 3.2.0: Data-Aware Workflows at Scale" class="btn btn-primary"><span class="me-1">←</span>Previous</a>
   </li>
   <li>
     <a class="btn btn-primary disabled">Next<span class="ms-1">→</span></a>
@@ -824,19 +953,19 @@ export AIRFLOW__CORE__MULTI_TEAM=True$$</div><h1 id="-deadline-alerts-now-with-s
                     
                 
             </div>
-            <span class="bodytext__medium--brownish-grey box-event__blogpost--date">Thu, Sep 25, 2025</span>
+            <span class="bodytext__medium--brownish-grey box-event__blogpost--date">Tue, Apr 7, 2026</span>
         </div>
         <p class="box-event__blogpost--header">
-            <a href="/blog/airflow-3.1.0/">
-                Apache Airflow 3.1.0: Human-Centered Workflows
+            <a href="/blog/airflow-3.2.0/">
+                Apache Airflow 3.2.0: Data-Aware Workflows at Scale
             </a>
         </p>
         
-            <p class="box-event__blogpost--author">Kaxil Naik</p>
+            <p class="box-event__blogpost--author">Rahul Vats</p>
         
-        <p class="box-event__blogpost--description">Apache Airflow 3.1.0 introduces Human-in-the-Loop workflows, 17-language internationalization, deadline alerts, and React plugin system for data orchestration teams.</p>
+        <p class="box-event__blogpost--description">Apache Airflow 3.2.0 introduces Asset partitioning for granular pipeline orchestration, multi-team deployments for enterprise scale, synchronous deadline alert callbacks, and continued progress toward full Task SDK separation.</p>
         <div class="mt-auto">
-            <a href="/blog/airflow-3.1.0/">
+            <a href="/blog/airflow-3.2.0/">
                 
 
 <button class="btn-hollow btn-blue bodytext__medium--cerulean-blue" >Read more</button>
@@ -857,36 +986,23 @@ export AIRFLOW__CORE__MULTI_TEAM=True$$</div><h1 id="-deadline-alerts-now-with-s
             <div class="tags-container">
                 
                     
-                        <a class="tag" href="/blog/tags/release/">Release</a>
+                        <a class="tag" href="/blog/tags/community/">Community</a>
                     
                 
             </div>
-            <span class="bodytext__medium--brownish-grey box-event__blogpost--date">Tue, Apr 22, 2025</span>
+            <span class="bodytext__medium--brownish-grey box-event__blogpost--date">Thu, Mar 19, 2026</span>
         </div>
         <p class="box-event__blogpost--header">
-            <a href="/blog/airflow-three-point-oh-is-here/">
-                Apache Airflow® 3 is Generally Available!
+            <a href="/blog/airflow-registry/">
+                Introducing the Apache Airflow Registry
             </a>
         </p>
         
-        <p class="box-event__blogpost--author">
-          
-          
-            
-              <a href="https://linkedin.com/in/kaxil" target="_blank" rel="noopener">Kaxil Naik</a>
-            
-            , 
-          
-            
-              <a href="https://linkedin.com/in/vikramkoka" target="_blank" rel="noopener">Vikram Koka</a>
-            
-            
-          
-        </p>
+            <p class="box-event__blogpost--author">Kaxil Naik</p>
         
-        <p class="box-event__blogpost--description">We&#39;re proud to announce that Apache Airflow 3.0.0 has been released.</p>
+        <p class="box-event__blogpost--description">The Apache Airflow Registry is a searchable catalog of 98 providers and 1,600&#43; modules — operators, hooks, sensors, triggers, and more — now live on airflow.apache.org.</p>
         <div class="mt-auto">
-            <a href="/blog/airflow-three-point-oh-is-here/">
+            <a href="/blog/airflow-registry/">
                 
 
 <button class="btn-hollow btn-blue bodytext__medium--cerulean-blue" >Read more</button>
@@ -923,7 +1039,7 @@ export AIRFLOW__CORE__MULTI_TEAM=True$$</div><h1 id="-deadline-alerts-now-with-s
                 
 
     
-    <a href=https://github.com/apache/airflow-site/edit/main/landing-pages/site/content/en//blog/airflow-3.2.0>
+    <a href=https://github.com/apache/airflow-site/edit/main/landing-pages/site/content/en//blog/common-ai-provider>
         
 
 
@@ -1107,17 +1223,7 @@ export AIRFLOW__CORE__MULTI_TEAM=True$$</div><h1 id="-deadline-alerts-now-with-s
     </div>
 </footer>
 
-
-      <link rel="stylesheet" href="/css/katex.min.css" integrity="sha512-cUVCcxGr/h6CDDP43R35MpS88lH&#43;gMjrgyjpQQ2AwJ7QH7rT6n0izNNx0Eet7M9lUYLDRHRUp1WBaRXUdHrULA==" crossorigin="anonymous">
-    
-      <script defer src="/js/katex.min.js" integrity="sha512-flmiE30MLLlw4eH71WAjR4AscK3YliISnCxlDgPV1k9zSou2qrtwyCUto2e9uiJsVptQC6MrUOUt9NpQAO/GAg==" crossorigin="anonymous" ></script>
-    
-      <script defer src="/js/mhchem.min.js" integrity="sha512-3ev&#43;ZV&#43;t8BSzoQQ3rz9&#43;H/C0Eq&#43;islU1W1BuSYQ&#43;XNPvlZi96z5MlGcS7WrzVceYvYXt56&#43;1nKQcGNVcyQwZWg==" crossorigin="anonymous" ></script>
-    
-      <script defer src="/js/auto-render.min.js" integrity="sha512-0HzJcHCD&#43;wBh9kNUUcm3DWH9IbNDfudsYyMD5EHwSuFK6aEsaa/UEPqqk4t0pm4bbmwR6A11yNsD7Q&#43;nz6XF&#43;Q==" crossorigin="anonymous"
-onload='renderMathInElement(document.body, null);'>
-</script>
-    <script src="/js/main.min.358b664598ed6c414b48721e94dd89ae3daef991c30b4234063d7998daba862a.js" integrity="sha256-NYtmRZjtbEFLSHIelN2Jrj2u&#43;ZHDC0I0Bj15mNq6hio=" crossorigin="anonymous"></script>
+<script src="/js/main.min.358b664598ed6c414b48721e94dd89ae3daef991c30b4234063d7998daba862a.js" integrity="sha256-NYtmRZjtbEFLSHIelN2Jrj2u&#43;ZHDC0I0Bj15mNq6hio=" crossorigin="anonymous"></script>
 <script defer src="/js/click-to-copy.min.73478a7d4807698aed7e355eb23f9890ca18fea3158604c8471746d046702bad.js" integrity="sha256-c0eKfUgHaYrtfjVesj&#43;YkMoY/qMVhgTIRxdG0EZwK60=" crossorigin="anonymous"></script>
 <script src='/js/tabpane-persist.js'></script>
 
diff --git a/blog/documenting-using-local-development-environments/index.html b/blog/documenting-using-local-development-environments/index.html
index 29f72ac71d..82d288dbfb 100644
--- a/blog/documenting-using-local-development-environments/index.html
+++ b/blog/documenting-using-local-development-environments/index.html
@@ -31,14 +31,14 @@
   <meta property="og:type" content="article">
     <meta property="article:section" content="blog">
     <meta property="article:published_time" content="2019-11-22T00:00:00+00:00">
-    <meta property="article:modified_time" content="2026-04-14T02:24:09+02:00">
+    <meta property="article:modified_time" content="2026-04-14T02:30:35+01:00">
     <meta property="article:tag" content="Development">
     <meta property="og:image" content="/images/feature-image.png">
 
   <meta itemprop="name" content="Documenting using local development environment">
   <meta itemprop="description" content="The story behind documenting local development environment of Apache Airflow">
   <meta itemprop="datePublished" content="2019-11-22T00:00:00+00:00">
-  <meta itemprop="dateModified" content="2026-04-14T02:24:09+02:00">
+  <meta itemprop="dateModified" content="2026-04-14T02:30:35+01:00">
   <meta itemprop="wordCount" content="256">
   <meta itemprop="image" content="/images/feature-image.png">
   <meta itemprop="keywords" content="Development">
diff --git a/blog/experience-in-google-season-of-docs-2019-with-apache-airflow/index.html b/blog/experience-in-google-season-of-docs-2019-with-apache-airflow/index.html
index 7c64d67ece..e0e48da0d2 100644
--- a/blog/experience-in-google-season-of-docs-2019-with-apache-airflow/index.html
+++ b/blog/experience-in-google-season-of-docs-2019-with-apache-airflow/index.html
@@ -32,7 +32,7 @@ About Me I have been writing tech articles on medium as well as my blog for the
   <meta property="og:type" content="article">
     <meta property="article:section" content="blog">
     <meta property="article:published_time" content="2019-12-20T00:00:00+00:00">
-    <meta property="article:modified_time" content="2026-04-14T02:24:09+02:00">
+    <meta property="article:modified_time" content="2026-04-14T02:30:35+01:00">
     <meta property="article:tag" content="Documentation">
     <meta property="og:image" content="/images/feature-image.png">
 
@@ -40,7 +40,7 @@ About Me I have been writing tech articles on medium as well as my blog for the
   <meta itemprop="description" content="I came across Google Season of Docs (GSoD) almost by accident, thanks to my extensive HackerNews and Twitter addiction. I was familiar with the Google Summer of Code but not with this program. It turns out it was the inaugural phase. I read the details, and the process felt a lot like GSoC except that this was about documentation.
 About Me I have been writing tech articles on medium as well as my blog for the past 1.5 years. Blogging helps me test my understanding of the concepts as untangling the toughest of ideas in simple sentences requires a considerable time investment.">
   <meta itemprop="datePublished" content="2019-12-20T00:00:00+00:00">
-  <meta itemprop="dateModified" content="2026-04-14T02:24:09+02:00">
+  <meta itemprop="dateModified" content="2026-04-14T02:30:35+01:00">
   <meta itemprop="wordCount" content="1521">
   <meta itemprop="image" content="/images/feature-image.png">
   <meta itemprop="keywords" content="Documentation">
diff --git a/blog/experience-with-airflow-as-an-outreachy-intern/index.html b/blog/experience-with-airflow-as-an-outreachy-intern/index.html
index 54a1144a9c..f74fd49a74 100644
--- a/blog/experience-with-airflow-as-an-outreachy-intern/index.html
+++ b/blog/experience-with-airflow-as-an-outreachy-intern/index.html
@@ -32,7 +32,7 @@ Contribution Period The first thing I had to do was choose a project under an or
   <meta property="og:type" content="article">
     <meta property="article:section" content="blog">
     <meta property="article:published_time" content="2020-08-30T00:00:00+00:00">
-    <meta property="article:modified_time" content="2026-04-14T02:24:09+02:00">
+    <meta property="article:modified_time" content="2026-04-14T02:30:35+01:00">
     <meta property="article:tag" content="Community">
     <meta property="og:image" content="/images/feature-image.png">
 
@@ -40,7 +40,7 @@ Contribution Period The first thing I had to do was choose a project under an or
   <meta itemprop="description" content="Outreachy is a program which organises three months paid internships with FOSS projects for people who are typically underrepresented in those projects.
 Contribution Period The first thing I had to do was choose a project under an organisation. After going through all the projects I chose “Extending the REST API of Apache Airflow”, because I had a good idea of what REST API(s) are, so I thought it would be easier to get started with the contributions. The next step was to set up Airflow’s dev environment which thanks to Breeze, was a breeze. Since I had never contributed to FOSS before so this part was overwhelming but there were plenty  [...]
   <meta itemprop="datePublished" content="2020-08-30T00:00:00+00:00">
-  <meta itemprop="dateModified" content="2026-04-14T02:24:09+02:00">
+  <meta itemprop="dateModified" content="2026-04-14T02:30:35+01:00">
   <meta itemprop="wordCount" content="528">
   <meta itemprop="image" content="/images/feature-image.png">
   <meta itemprop="keywords" content="Community">
@@ -672,20 +672,37 @@ community that has been made my summer, one to remember.</p>
                         <a class="tag" href="/blog/tags/community/">Community</a>
                     
                 
+                    
+                        <a class="tag" href="/blog/tags/release/">Release</a>
+                    
+                
             </div>
-            <span class="bodytext__medium--brownish-grey box-event__blogpost--date">Thu, Mar 19, 2026</span>
+            <span class="bodytext__medium--brownish-grey box-event__blogpost--date">Tue, Apr 14, 2026</span>
         </div>
         <p class="box-event__blogpost--header">
-            <a href="/blog/airflow-registry/">
-                Introducing the Apache Airflow Registry
+            <a href="/blog/common-ai-provider/">
+                Introducing the Common AI Provider: LLM and AI Agent Support for Apache Airflow
             </a>
         </p>
         
-            <p class="box-event__blogpost--author">Kaxil Naik</p>
+        <p class="box-event__blogpost--author">
+          
+          
+            
+              <a href="https://linkedin.com/in/kaxil" target="_blank" rel="noopener">Kaxil Naik</a>
+            
+            , 
+          
+            
+              <a href="https://linkedin.com/in/pavan-kumar-gopidesu" target="_blank" rel="noopener">Pavan Kumar Gopidesu</a>
+            
+            
+          
+        </p>
         
-        <p class="box-event__blogpost--description">The Apache Airflow Registry is a searchable catalog of 98 providers and 1,600&#43; modules — operators, hooks, sensors, triggers, and more — now live on airflow.apache.org.</p>
+        <p class="box-event__blogpost--description">The Common AI Provider adds LLM and AI agent operators to Apache Airflow with 6 operators, 5 toolsets, and 20&#43; model providers in one package.</p>
         <div class="mt-auto">
-            <a href="/blog/airflow-registry/">
+            <a href="/blog/common-ai-provider/">
                 
 
 <button class="btn-hollow btn-blue bodytext__medium--cerulean-blue" >Read more</button>
@@ -709,24 +726,20 @@ community that has been made my summer, one to remember.</p>
                         <a class="tag" href="/blog/tags/community/">Community</a>
                     
                 
-                    
-                        <a class="tag" href="/blog/tags/airflow-summit/">Airflow summit</a>
-                    
-                
             </div>
-            <span class="bodytext__medium--brownish-grey box-event__blogpost--date">Mon, May 16, 2022</span>
+            <span class="bodytext__medium--brownish-grey box-event__blogpost--date">Thu, Mar 19, 2026</span>
         </div>
         <p class="box-event__blogpost--header">
-            <a href="/blog/airflow_summit_2022/">
-                Airflow Summit 2022
+            <a href="/blog/airflow-registry/">
+                Introducing the Apache Airflow Registry
             </a>
         </p>
         
-            <p class="box-event__blogpost--author">Jarek Potiuk</p>
+            <p class="box-event__blogpost--author">Kaxil Naik</p>
         
-        <p class="box-event__blogpost--description">Airflow Summit 2022 is here</p>
+        <p class="box-event__blogpost--description">The Apache Airflow Registry is a searchable catalog of 98 providers and 1,600&#43; modules — operators, hooks, sensors, triggers, and more — now live on airflow.apache.org.</p>
         <div class="mt-auto">
-            <a href="/blog/airflow_summit_2022/">
+            <a href="/blog/airflow-registry/">
                 
 
 <button class="btn-hollow btn-blue bodytext__medium--cerulean-blue" >Read more</button>
diff --git a/blog/fab-oid-vulnerability/index.html b/blog/fab-oid-vulnerability/index.html
index 3a7f722c38..bad50fd654 100644
--- a/blog/fab-oid-vulnerability/index.html
+++ b/blog/fab-oid-vulnerability/index.html
@@ -31,14 +31,14 @@
   <meta property="og:type" content="article">
     <meta property="article:section" content="blog">
     <meta property="article:published_time" content="2024-02-26T00:00:00+00:00">
-    <meta property="article:modified_time" content="2026-04-14T02:24:09+02:00">
+    <meta property="article:modified_time" content="2026-04-14T02:30:35+01:00">
     <meta property="article:tag" content="Vulnerabilities">
     <meta property="og:image" content="/images/feature-image.png">
 
   <meta itemprop="name" content="Vulnerability in long deprecated OpenID authentication method in Flask AppBuilder">
   <meta itemprop="description" content="Advising users who still use a long-deprecated OpenID authentication method in Flask AppBuilder to upgrade to Apache Airflow 2.8.2">
   <meta itemprop="datePublished" content="2024-02-26T00:00:00+00:00">
-  <meta itemprop="dateModified" content="2026-04-14T02:24:09+02:00">
+  <meta itemprop="dateModified" content="2026-04-14T02:30:35+01:00">
   <meta itemprop="wordCount" content="638">
   <meta itemprop="image" content="/images/feature-image.png">
   <meta itemprop="keywords" content="Vulnerabilities">
diff --git a/blog/implementing-stable-api-for-apache-airflow/index.html b/blog/implementing-stable-api-for-apache-airflow/index.html
index 1dcf2a3135..74b4851318 100644
--- a/blog/implementing-stable-api-for-apache-airflow/index.html
+++ b/blog/implementing-stable-api-for-apache-airflow/index.html
@@ -31,14 +31,14 @@
   <meta property="og:type" content="article">
     <meta property="article:section" content="blog">
     <meta property="article:published_time" content="2020-07-19T00:00:00+00:00">
-    <meta property="article:modified_time" content="2026-04-14T02:24:09+02:00">
+    <meta property="article:modified_time" content="2026-04-14T02:30:35+01:00">
     <meta property="article:tag" content="REST API">
     <meta property="og:image" content="/images/feature-image.png">
 
   <meta itemprop="name" content="Implementing Stable API for Apache Airflow">
   <meta itemprop="description" content="An Outreachy intern&#39;s progress report on contributing to Apache Airflow REST API.">
   <meta itemprop="datePublished" content="2020-07-19T00:00:00+00:00">
-  <meta itemprop="dateModified" content="2026-04-14T02:24:09+02:00">
+  <meta itemprop="dateModified" content="2026-04-14T02:30:35+01:00">
   <meta itemprop="wordCount" content="703">
   <meta itemprop="image" content="/images/feature-image.png">
   <meta itemprop="keywords" content="REST API">
diff --git a/blog/index.html b/blog/index.html
index f1f698e6b8..309f5c97b0 100644
--- a/blog/index.html
+++ b/blog/index.html
@@ -34,7 +34,7 @@
 
   <meta itemprop="name" content="Blog">
   <meta itemprop="description" content="Platform created by the community to programmatically author, schedule and monitor workflows.">
-  <meta itemprop="dateModified" content="2026-04-14T02:24:09+02:00">
+  <meta itemprop="dateModified" content="2026-04-14T02:30:35+01:00">
   <meta itemprop="image" content="/images/feature-image.png">
 
 
@@ -564,6 +564,60 @@
                     <div class="list-item list-item--wide">
                         
 
+<div class="card">
+    <div class="box-event__blogpost">
+        <div class="box-event__blogpost--metadata">
+            <div class="tags-container">
+                
+                    
+                        <a class="tag" href="/blog/tags/community/">Community</a>
+                    
+                
+                    
+                        <a class="tag" href="/blog/tags/release/">Release</a>
+                    
+                
+            </div>
+            <span class="bodytext__medium--brownish-grey box-event__blogpost--date">Tue, Apr 14, 2026</span>
+        </div>
+        <p class="box-event__blogpost--header">
+            <a href="/blog/common-ai-provider/">
+                Introducing the Common AI Provider: LLM and AI Agent Support for Apache Airflow
+            </a>
+        </p>
+        
+        <p class="box-event__blogpost--author">
+          
+          
+            
+              <a href="https://linkedin.com/in/kaxil" target="_blank" rel="noopener">Kaxil Naik</a>
+            
+            , 
+          
+            
+              <a href="https://linkedin.com/in/pavan-kumar-gopidesu" target="_blank" rel="noopener">Pavan Kumar Gopidesu</a>
+            
+            
+          
+        </p>
+        
+        <p class="box-event__blogpost--description">The Common AI Provider adds LLM and AI agent operators to Apache Airflow with 6 operators, 5 toolsets, and 20&#43; model providers in one package.</p>
+        <div class="mt-auto">
+            <a href="/blog/common-ai-provider/">
+                
+
+<button class="btn-hollow btn-blue bodytext__medium--cerulean-blue" >Read more</button>
+
+            </a>
+        </div>
+    </div>
+</div>
+
+                    </div>
+                
+                    <div class="list-item list-item--wide">
+                        
+
 <div class="card">
     <div class="box-event__blogpost">
         <div class="box-event__blogpost--metadata">
diff --git a/blog/index.xml b/blog/index.xml
index 482be78783..6c779b848f 100644
--- a/blog/index.xml
+++ b/blog/index.xml
@@ -8,15 +8,325 @@
 <id>/blog/</id>
 
 
-  <updated>2026-04-14T02:24:09Z</updated>
+  <updated>2026-04-14T02:30:35Z</updated>
 
 
+  <entry>
+    <title>Introducing the Common AI Provider: LLM and AI Agent Support for Apache Airflow</title>
+    <link href="/blog/common-ai-provider/" rel="alternate"/>
+    <id>/blog/common-ai-provider/</id>
+    <published>2026-04-14T00:00:00Z</published>
+    <updated>2026-04-14T02:30:35Z</updated>
+    <author>
+      <name>Apache Airflow</name>
+    </author>
+    <content type="html">&lt;![CDATA[<p>At <a href="https://airflowsummit.org/sessions/2025/airflow-as-an-ai-agents-toolkit-unlocking-1000-integrations-with-mcp/">Airflow Summit 2025</a>, we previewed what native AI integration in Apache Airflow could look like. Today we&rsquo;re shipping it.</p>
+<p><strong><a href="https://pypi.org/project/apache-airflow-providers-common-ai/"><code>apache-airflow-providers-common-ai</code></a> 0.1.0</strong> adds LLM and agent capabilities directly to Airflow. Not a wrapper around another framework, but a provider package that plugs into the orchestrator you already run. It&rsquo;s built on <a href="https://ai.pydantic.dev/">Pydantic AI</a> and supports 20+ model providers (OpenAI, Anthropic, Google, Azure, Bedrock, Ollama, and more) through a s [...]
+<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">pip install <span class="s1">&#39;apache-airflow-providers-common-ai&#39;</span>
+</span></span></code></pre></div><p>Requires Apache Airflow 3.0+.</p>
+<blockquote>
+<p><strong>Note:</strong> This is a 0.x release. We&rsquo;re actively looking for feedback and iterating fast, so breaking changes are possible between minor versions. Try it, tell us what works and what doesn&rsquo;t. Your input directly shapes the API.</p></blockquote>
+<h2 id="by-the-numbers">By the Numbers</h2>
+<table>
+  <thead>
+      <tr>
+          <th></th>
+          <th></th>
+      </tr>
+  </thead>
+  <tbody>
+      <tr>
+          <td><strong>6</strong></td>
+          <td>Operators</td>
+      </tr>
+      <tr>
+          <td><strong>6</strong></td>
+          <td>TaskFlow decorators</td>
+      </tr>
+      <tr>
+          <td><strong>5</strong></td>
+          <td>Toolsets</td>
+      </tr>
+      <tr>
+          <td><strong>4</strong></td>
+          <td>Connection types</td>
+      </tr>
+      <tr>
+          <td><strong>20+</strong></td>
+          <td>Supported model providers via Pydantic AI</td>
+      </tr>
+  </tbody>
+</table>
+<h2 id="the-decorator-suite">The Decorator Suite</h2>
+<p>Every operator has a matching TaskFlow decorator.</p>
+<h3 id="taskllm-single-llm-call"><code>@task.llm</code>: Single LLM Call</h3>
+<p>Send a prompt, get text or structured output back.</p>
+<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">pydantic</span> <span class="kn">import</span> <span class="n">BaseModel</span>
+</span></span><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">airflow.providers.common.compat.sdk</span> <span class="kn">import</span> <span class="n">dag</span><span class="p">,</span> <span class="n">task</span>
+</span></span><span class="line"><span class="cl">
+</span></span><span class="line"><span class="cl">
+</span></span><span class="line"><span class="cl"><span class="nd">@dag</span>
+</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">my_pipeline</span><span class="p">():</span>
+</span></span><span class="line"><span class="cl">    <span class="k">class</span> <span class="nc">Entities</span><span class="p">(</span><span class="n">BaseModel</span><span class="p">):</span>
+</span></span><span class="line"><span class="cl">        <span class="n">names</span><span class="p">:</span> <span class="nb">list</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span>
+</span></span><span class="line"><span class="cl">        <span class="n">locations</span><span class="p">:</span> <span class="nb">list</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span>
+</span></span><span class="line"><span class="cl">
+</span></span><span class="line"><span class="cl">    <span class="nd">@task.llm</span><span class="p">(</span>
+</span></span><span class="line"><span class="cl">        <span class="n">llm_conn_id</span><span class="o">=</span><span class="s2">&#34;my_openai_conn&#34;</span><span class="p">,</span>
+</span></span><span class="line"><span class="cl">        <span class="n">system_prompt</span><span class="o">=</span><span class="s2">&#34;Extract named entities.&#34;</span><span class="p">,</span>
+</span></span><span class="line"><span class="cl">        <span class="n">output_type</span><span class="o">=</span><span class="n">Entities</span><span class="p">,</span>
+</span></span><span class="line"><span class="cl">    <span class="p">)</span>
+</span></span><span class="line"><span class="cl">    <span class="k">def</span> <span class="nf">extract</span><span class="p">(</span><span class="n">text</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
+</span></span><span class="line"><span class="cl">        <span class="k">return</span> <span class="sa">f</span><span class="s2">&#34;Extract entities from: </span><span class="si">{</span><span class="n">text</span><span class="si">}</span><span class="s2">&#34;</span>
+</span></span><span class="line"><span class="cl">
+</span></span><span class="line"><span class="cl">    <span class="n">extract</span><span class="p">(</span><span class="s2">&#34;Alice visited Paris and met Bob in London.&#34;</span><span class="p">)</span>
+</span></span><span class="line"><span class="cl">
+</span></span><span class="line"><span class="cl">
+</span></span><span class="line"><span class="cl"><span class="n">my_pipeline</span><span class="p">()</span>
+</span></span></code></pre></div><p>The LLM returns a typed <code>Entities</code> object, not a string you have to parse. Downstream tasks get structured data through <code>XCom</code>.</p>
+<h3 id="taskagent-multi-step-agent-with-tools"><code>@task.agent</code>: Multi-Step Agent with Tools</h3>
+<p>When the LLM needs to query databases, call APIs, or read files across multiple steps, use <code>@task.agent</code>. The agent picks which tools to call and loops until it has an answer.</p>
+<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">airflow.providers.common.ai.toolsets.sql</span> <span class="kn">import</span> <span class="n">SQLToolset</span>
+</span></span><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">airflow.providers.common.compat.sdk</span> <span class="kn">import</span> <span class="n">dag</span><span class="p">,</span> <span class="n">task</span>
+</span></span><span class="line"><span class="cl">
+</span></span><span class="line"><span class="cl">
+</span></span><span class="line"><span class="cl"><span class="nd">@dag</span>
+</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">sql_analyst</span><span class="p">():</span>
+</span></span><span class="line"><span class="cl">    <span class="nd">@task.agent</span><span class="p">(</span>
+</span></span><span class="line"><span class="cl">        <span class="n">llm_conn_id</span><span class="o">=</span><span class="s2">&#34;my_openai_conn&#34;</span><span class="p">,</span>
+</span></span><span class="line"><span class="cl">        <span class="n">system_prompt</span><span class="o">=</span><span class="s2">&#34;You are a SQL analyst. Use tools to answer questions with data.&#34;</span><span class="p">,</span>
+</span></span><span class="line"><span class="cl">        <span class="n">toolsets</span><span class="o">=</span><span class="p">[</span>
+</span></span><span class="line"><span class="cl">            <span class="n">SQLToolset</span><span class="p">(</span>
+</span></span><span class="line"><span class="cl">                <span class="n">db_conn_id</span><span class="o">=</span><span class="s2">&#34;postgres_default&#34;</span><span class="p">,</span>
+</span></span><span class="line"><span class="cl">                <span class="n">allowed_tables</span><span class="o">=</span><span class="p">[</span><span class="s2">&#34;customers&#34;</span><span class="p">,</span> <span class="s2">&#34;orders&#34;</span><span class="p">],</span>
+</span></span><span class="line"><span class="cl">                <span class="n">max_rows</span><span class="o">=</span><span class="mi">20</span><span class="p">,</span>
+</span></span><span class="line"><span class="cl">            <span class="p">)</span>
+</span></span><span class="line"><span class="cl">        <span class="p">],</span>
+</span></span><span class="line"><span class="cl">    <span class="p">)</span>
+</span></span><span class="line"><span class="cl">    <span class="k">def</span> <span class="nf">analyze</span><span class="p">(</span><span class="n">question</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
+</span></span><span class="line"><span class="cl">        <span class="k">return</span> <span class="sa">f</span><span class="s2">&#34;Answer this question about our data: </span><span class="si">{</span><span class="n">question</span><span class="si">}</span><span class="s2">&#34;</span>
+</span></span><span class="line"><span class="cl">
+</span></span><span class="line"><span class="cl">    <span class="n">analyze</span><span class="p">(</span><span class="s2">&#34;What are the top 5 customers by order count?&#34;</span><span class="p">)</span>
+</span></span><span class="line"><span class="cl">
+</span></span><span class="line"><span class="cl">
+</span></span><span class="line"><span class="cl"><span class="n">sql_analyst</span><span class="p">()</span>
+</span></span></code></pre></div><p>Under the hood, the agent calls <code>list_tables</code>, <code>get_schema</code>, and <code>query</code> on its own until it has the answer.</p>
+<h3 id="taskllm_branch-llm-powered-branching"><code>@task.llm_branch</code>: LLM-Powered Branching</h3>
+<p>The LLM decides which downstream task(s) to run. No string parsing. The LLM returns a constrained enum built from the task&rsquo;s downstream IDs.</p>
+<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="nd">@task.llm_branch</span><span class="p">(</span>
+</span></span><span class="line"><span class="cl">    <span class="n">llm_conn_id</span><span class="o">=</span><span class="s2">&#34;my_openai_conn&#34;</span><span class="p">,</span>
+</span></span><span class="line"><span class="cl">    <span class="n">system_prompt</span><span class="o">=</span><span class="s2">&#34;Classify the support ticket priority.&#34;</span><span class="p">,</span>
+</span></span><span class="line"><span class="cl"><span class="p">)</span>
+</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">route_ticket</span><span class="p">(</span><span class="n">ticket_text</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
+</span></span><span class="line"><span class="cl">    <span class="k">return</span> <span class="sa">f</span><span class="s2">&#34;Classify this ticket: </span><span class="si">{</span><span class="n">ticket_text</span><span class="si">}</span><span class="s2">&#34;</span>
+</span></span></code></pre></div><h3 id="taskllm_sql-text-to-sql-with-safety-rails"><code>@task.llm_sql</code>: Text-to-SQL with Safety Rails</h3>
+<p>Generates SQL from natural language. The operator introspects your database schema and validates the output via AST parsing (<a href="https://github.com/tobymao/sqlglot">sqlglot</a>) before execution.</p>
+<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">airflow.providers.common.compat.sdk</span> <span class="kn">import</span> <span class="n">dag</span><span class="p">,</span> <span class="n">task</span>
+</span></span><span class="line"><span class="cl">
+</span></span><span class="line"><span class="cl">
+</span></span><span class="line"><span class="cl"><span class="nd">@dag</span>
+</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">sql_generator</span><span class="p">():</span>
+</span></span><span class="line"><span class="cl">    <span class="nd">@task.llm_sql</span><span class="p">(</span>
+</span></span><span class="line"><span class="cl">        <span class="n">llm_conn_id</span><span class="o">=</span><span class="s2">&#34;my_openai_conn&#34;</span><span class="p">,</span>
+</span></span><span class="line"><span class="cl">        <span class="n">db_conn_id</span><span class="o">=</span><span class="s2">&#34;postgres_default&#34;</span><span class="p">,</span>
+</span></span><span class="line"><span class="cl">        <span class="n">table_names</span><span class="o">=</span><span class="p">[</span><span class="s2">&#34;orders&#34;</span><span class="p">,</span> <span class="s2">&#34;customers&#34;</span><span class="p">],</span>
+</span></span><span class="line"><span class="cl">        <span class="n">dialect</span><span class="o">=</span><span class="s2">&#34;postgres&#34;</span><span class="p">,</span>
+</span></span><span class="line"><span class="cl">    <span class="p">)</span>
+</span></span><span class="line"><span class="cl">    <span class="k">def</span> <span class="nf">build_query</span><span class="p">(</span><span class="n">ds</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
+</span></span><span class="line"><span class="cl">        <span class="k">return</span> <span class="sa">f</span><span class="s2">&#34;Find customers who placed no orders after </span><span class="si">{</span><span class="n">ds</span><span class="si">}</span><span class="s2">&#34;</span>
+</span></span><span class="line"><span class="cl">
+</span></span><span class="line"><span class="cl">    <span class="n">build_query</span><span class="p">()</span>
+</span></span><span class="line"><span class="cl">
+</span></span><span class="line"><span class="cl">
+</span></span><span class="line"><span class="cl"><span class="n">sql_generator</span><span class="p">()</span>
+</span></span></code></pre></div><h3 id="taskllm_file_analysis-analyze-files-with-llms"><code>@task.llm_file_analysis</code>: Analyze Files with LLMs</h3>
+<p>Point it at files in object storage (S3, GCS, local) and let the LLM analyze them. Supports CSV, Parquet, Avro, JSON, and images (multimodal).</p>
+<p><img src="/blog/common-ai-provider/images/file-analysis-csv.png" alt="LLM analyzing a CSV file — identifying columns, counting rows, computing totals"></p>
+<p>It also handles multimodal input. Set <code>multi_modal=True</code> and the operator sends images and PDFs as binary attachments to the LLM:</p>
+<p><img src="images/file-analysis-image.png" alt="Multimodal file analysis — LLM describing components from an architecture diagram image"></p>
+<h3 id="taskllm_schema_compare-cross-database-schema-drift"><code>@task.llm_schema_compare</code>: Cross-Database Schema Drift</h3>
+<p>Compares schemas across databases and returns structured <code>SchemaMismatch</code> results with severity levels. Handles the type mapping headaches across systems (<code>varchar(n)</code> vs <code>string</code>, <code>timestamp</code> vs <code>timestamptz</code>).</p>
+<h2 id="350-hooks-as-ai-tools">350+ Hooks as AI Tools</h2>
+<p>Airflow already has 350+ provider hooks with typed methods, docstrings, and managed credentials. <code>S3Hook</code>, <code>GCSHook</code>, <code>SlackHook</code>, <code>SnowflakeHook</code>, <code>DbApiHook</code>. They all authenticate through Airflow&rsquo;s secret backend, and they all already work.</p>
+<p>Rather than setting up separate MCP servers with their own auth for each integration, <code>HookToolset</code> lets agents call hook methods directly using the connections you&rsquo;ve already configured.</p>
+<p><code>HookToolset</code> turns any of them into AI agent tools:</p>
+<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">airflow.providers.amazon.aws.hooks.s3</span> <span class="kn">import</span> <span class="n">S3Hook</span>
+</span></span><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">airflow.providers.common.ai.toolsets.hook</span> <span class="kn">import</span> <span class="n">HookToolset</span>
+</span></span><span class="line"><span class="cl">
+</span></span><span class="line"><span class="cl"><span class="c1"># S3Hook methods become agent tools: the agent can list, read, and check S3 objects</span>
+</span></span><span class="line"><span class="cl"><span class="n">HookToolset</span><span class="p">(</span>
+</span></span><span class="line"><span class="cl">    <span class="n">S3Hook</span><span class="p">(</span><span class="n">aws_conn_id</span><span class="o">=</span><span class="s2">&#34;aws_default&#34;</span><span class="p">),</span>
+</span></span><span class="line"><span class="cl">    <span class="n">allowed_methods</span><span class="o">=</span><span class="p">[</span><span class="s2">&#34;list_keys&#34;</span><span class="p">,</span> <span class="s2">&#34;read_key&#34;</span><span class="p">,</span> <span class="s2">&#34;check_for_key&#34;</span><span class="p">],</span>
+</span></span><span class="line"><span class="cl">    <span class="n">tool_name_prefix</span><span class="o">=</span><span class="s2">&#34;s3_&#34;</span><span class="p">,</span>
+</span></span><span class="line"><span class="cl"><span class="p">)</span>
+</span></span></code></pre></div><p>The introspection engine builds JSON Schema from method signatures and enriches tool descriptions from docstrings (Sphinx and Google style). You explicitly declare which methods to expose. No auto-discovery, no unintended access. The agent sees <code>s3_list_keys</code>, <code>s3_read_key</code>, <code>s3_check_for_key</code> as typed tools with parameter descriptions pulled straight from the hook.</p>
+<p>This works with <em>any</em> hook. Want your agent to send Slack messages? <code>HookToolset(SlackHook(...), allowed_methods=[&quot;send_message&quot;])</code>. Query Snowflake? Use <code>SQLToolset</code> with a Snowflake connection. Hit an internal API? <code>HookToolset(HttpHook(...), allowed_methods=[&quot;run&quot;])</code>.</p>
+<p>You can also compose multiple toolsets in a single agent. Give it <code>SQLToolset</code> for database access <em>and</em> <code>HookToolset</code> for API calls, and the agent picks the right tool for each step.</p>
+<p>Four toolsets ship with the provider:</p>
+<table>
+  <thead>
+      <tr>
+          <th>Toolset</th>
+          <th>What it does</th>
+      </tr>
+  </thead>
+  <tbody>
+      <tr>
+          <td><strong><code>SQLToolset</code></strong></td>
+          <td><code>list_tables</code>, <code>get_schema</code>, <code>query</code>, <code>check_query</code> for any <code>DbApiHook</code> database</td>
+      </tr>
+      <tr>
+          <td><strong><code>HookToolset</code></strong></td>
+          <td>Wraps any Airflow hook&rsquo;s methods as agent tools</td>
+      </tr>
+      <tr>
+          <td><strong><code>MCPToolset</code></strong></td>
+          <td>Connects to external <a href="https://modelcontextprotocol.io/">MCP</a> servers via Airflow Connections</td>
+      </tr>
+      <tr>
+          <td><strong><code>DataFusionToolset</code></strong></td>
+          <td>SQL over files in object storage (S3, other to come soon) via Apache DataFusion</td>
+      </tr>
+  </tbody>
+</table>
+<p>All toolsets resolve connections lazily through <code>BaseHook.get_connection()</code>. No hardcoded keys.</p>
+<p>Here&rsquo;s what an agent SQL analysis looks like in the Airflow task logs. The agent explored the schema, wrote queries, and produced a structured summary:</p>
+<p><img src="/blog/common-ai-provider/images/agent-sql-logs.png" alt="Agent SQL analysis showing tool calls and structured output in Airflow task logs"></p>
+<h2 id="not-locked-into-decorators">Not Locked Into Decorators</h2>
+<p>You don&rsquo;t have to use <code>@task.agent</code> or the operator classes. Pydantic AI works directly from a plain <code>@task</code>, <code>PythonOperator</code>, or any custom operator:</p>
+<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">pydantic_ai</span> <span class="kn">import</span> <span class="n">Agent</span>
+</span></span><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">airflow.providers.common.ai.hooks.pydantic_ai</span> <span class="kn">import</span> <span class="n">PydanticAIHook</span>
+</span></span><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">airflow.providers.common.ai.toolsets.sql</span> <span class="kn">import</span> <span class="n">SQLToolset</span>
+</span></span><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">airflow.providers.common.compat.sdk</span> <span class="kn">import</span> <span class="n">dag</span><span class="p">,</span> <span class="n">task</span>
+</span></span><span class="line"><span class="cl">
+</span></span><span class="line"><span class="cl">
+</span></span><span class="line"><span class="cl"><span class="nd">@dag</span>
+</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">raw_pydantic_ai</span><span class="p">():</span>
+</span></span><span class="line"><span class="cl">    <span class="nd">@task</span>
+</span></span><span class="line"><span class="cl">    <span class="k">def</span> <span class="nf">multi_agent</span><span class="p">():</span>
+</span></span><span class="line"><span class="cl">        <span class="n">hook</span> <span class="o">=</span> <span class="n">PydanticAIHook</span><span class="p">(</span><span class="n">llm_conn_id</span><span class="o">=</span><span class="s2">&#34;my_openai_conn&#34;</span><span class="p">)</span>
+</span></span><span class="line"><span class="cl">        <span class="n">model</span> <span class="o">=</span> <span class="n">hook</span><span class="o">.</span><span class="n">get_conn</span><span class="p">()</span>
+</span></span><span class="line"><span class="cl">
+</span></span><span class="line"><span class="cl">        <span class="n">agent</span> <span class="o">=</span> <span class="n">Agent</span><span class="p">(</span>
+</span></span><span class="line"><span class="cl">            <span class="n">model</span><span class="p">,</span>
+</span></span><span class="line"><span class="cl">            <span class="n">system_prompt</span><span class="o">=</span><span class="s2">&#34;You are a SQL analyst.&#34;</span><span class="p">,</span>
+</span></span><span class="line"><span class="cl">            <span class="n">toolsets</span><span class="o">=</span><span class="p">[</span><span class="n">SQLToolset</span><span class="p">(</span><span class="n">db_conn_id</span><span class="o">=</span><span class="s2">&#34;postgres_default&#34;</span><span class="p">)],</span>
+</span></span><span class="line"><span class="cl">        <span class="p">)</span>
+</span></span><span class="line"><span class="cl">        <span class="n">result</span> <span class="o">=</span> <span class="n">agent</span><span class="o">.</span><span class="n">run_sync</span><span class="p">(</span><span class="s2">&#34;What are the top products by revenue?&#34;</span><span class="p">)</span>
+</span></span><span class="line"><span class="cl">        <span class="k">return</span> <span class="n">result</span><span class="o">.</span><span class="n">output</span>
+</span></span><span class="line"><span class="cl">
+</span></span><span class="line"><span class="cl">    <span class="n">multi_agent</span><span class="p">()</span>
+</span></span><span class="line"><span class="cl">
+</span></span><span class="line"><span class="cl">
+</span></span><span class="line"><span class="cl"><span class="n">raw_pydantic_ai</span><span class="p">()</span>
+</span></span></code></pre></div><p>This gives you full control: run multiple agent calls in one task, swap models at runtime, combine outputs from different agents before returning.</p>
+<p><code>@task.agent</code> adds guardrails on top (durable execution, HITL review, automatic tool logging). Raw Pydantic AI skips those. Both paths use the same toolsets.</p>
+<h2 id="human-in-the-loop">Human-in-the-Loop</h2>
+<p>Not every LLM output should go straight to production. The provider has two levels of human oversight.</p>
+<p><strong>Approval gates</strong>: the task defers after generating output and waits for a human to approve before downstream tasks run:</p>
+<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="n">LLMOperator</span><span class="p">(</span>
+</span></span><span class="line"><span class="cl">    <span class="n">task_id</span><span class="o">=</span><span class="s2">&#34;summarize_report&#34;</span><span class="p">,</span>
+</span></span><span class="line"><span class="cl">    <span class="n">prompt</span><span class="o">=</span><span class="s2">&#34;Summarize the quarterly financial report for stakeholders.&#34;</span><span class="p">,</span>
+</span></span><span class="line"><span class="cl">    <span class="n">llm_conn_id</span><span class="o">=</span><span class="s2">&#34;my_openai_conn&#34;</span><span class="p">,</span>
+</span></span><span class="line"><span class="cl">    <span class="n">require_approval</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
+</span></span><span class="line"><span class="cl">    <span class="n">approval_timeout</span><span class="o">=</span><span class="n">timedelta</span><span class="p">(</span><span class="n">hours</span><span class="o">=</span><span class="mi">24</span><span class="p">),</span>
+</span></span><span class="line"><span class="cl">    <span class="n">allow_modifications</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>  <span class="c1"># reviewer can edit the output</span>
+</span></span><span class="line"><span class="cl"><span class="p">)</span>
+</span></span></code></pre></div><p><strong>Iterative review</strong>: a human reviews agent output, approves, rejects, or requests changes, and the agent revises in a loop:</p>
+<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="n">AgentOperator</span><span class="p">(</span>
+</span></span><span class="line"><span class="cl">    <span class="n">task_id</span><span class="o">=</span><span class="s2">&#34;analyst&#34;</span><span class="p">,</span>
+</span></span><span class="line"><span class="cl">    <span class="n">prompt</span><span class="o">=</span><span class="s2">&#34;Summarize the Q4 sales report.&#34;</span><span class="p">,</span>
+</span></span><span class="line"><span class="cl">    <span class="n">llm_conn_id</span><span class="o">=</span><span class="s2">&#34;my_openai_conn&#34;</span><span class="p">,</span>
+</span></span><span class="line"><span class="cl">    <span class="n">enable_hitl_review</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
+</span></span><span class="line"><span class="cl">    <span class="n">max_hitl_iterations</span><span class="o">=</span><span class="mi">5</span><span class="p">,</span>
+</span></span><span class="line"><span class="cl">    <span class="n">hitl_timeout</span><span class="o">=</span><span class="n">timedelta</span><span class="p">(</span><span class="n">minutes</span><span class="o">=</span><span class="mi">30</span><span class="p">),</span>
+</span></span><span class="line"><span class="cl"><span class="p">)</span>
+</span></span></code></pre></div><p>A built-in plugin adds the review UI to the Airflow web interface.</p>
+<p><img src="/blog/common-ai-provider/images/hitl-approval.png" alt="Human-in-the-loop approval interface showing the generated output with approve, reject, and modify options"></p>
+<p><img src="images/HITLReviewTab.gif" alt="Human-in-the-loop review tab in the task instance page"></p>
+<h2 id="durable-execution">Durable Execution</h2>
+<p>LLM agent calls are expensive. When a 10-step agent task fails on step 8, a retry shouldn&rsquo;t re-run all 10 steps and double your API bill. A single parameter fixes this:</p>
+<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="n">AgentOperator</span><span class="p">(</span>
+</span></span><span class="line"><span class="cl">    <span class="n">task_id</span><span class="o">=</span><span class="s2">&#34;analyst&#34;</span><span class="p">,</span>
+</span></span><span class="line"><span class="cl">    <span class="n">prompt</span><span class="o">=</span><span class="s2">&#34;Analyze quarterly trends across all regions.&#34;</span><span class="p">,</span>
+</span></span><span class="line"><span class="cl">    <span class="n">llm_conn_id</span><span class="o">=</span><span class="s2">&#34;my_openai_conn&#34;</span><span class="p">,</span>
+</span></span><span class="line"><span class="cl">    <span class="n">toolsets</span><span class="o">=</span><span class="p">[</span><span class="n">SQLToolset</span><span class="p">(</span><span class="n">db_conn_id</span><span class="o">=</span><span class="s2">&#34;postgres_default&#34;</span><span class="p">)],</span>
+</span></span><span class="line"><span class="cl">    <span class="n">durable</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
+</span></span><span class="line"><span class="cl"><span class="p">)</span>
+</span></span></code></pre></div><p>With <code>durable=True</code>, each model response and tool result is cached to <code>ObjectStorage</code> as the agent runs. On retry, cached steps replay instantly: no repeated LLM calls, no repeated tool execution. The cache is deleted after successful completion.</p>
+<p>Say the agent ran <code>list_tables</code>, <code>get_schema</code>, <code>get_schema</code>, <code>query</code>, then hit a transient failure:</p>
+<p><img src="/blog/common-ai-provider/images/durable-attempt-1.png" alt="Attempt 1: agent runs tool calls then fails on a transient error"></p>
+<p>On retry, those 4 tool calls and 4 model responses replay from cache in milliseconds. The agent picks up exactly where it left off:</p>
+<p><img src="/blog/common-ai-provider/images/durable-attempt-2.png" alt="Attempt 2: cached steps replayed instantly, agent continues from where it left off"></p>
+<p>The summary line tells you exactly what happened:</p>
+<p><img src="/blog/common-ai-provider/images/durable-summary.png" alt="Durable execution summary showing replayed vs fresh steps"></p>
+<p>Works with any <code>ObjectStorage</code> backend (local filesystem for dev, S3/GCS for production) and any toolset.</p>
+<h2 id="any-model-one-interface">Any Model, One Interface</h2>
+<p>Configure your LLM connection once. Switch providers by changing the connection, not the DAG code.</p>
+<p>Four connection types:</p>
+<table>
+  <thead>
+      <tr>
+          <th>Connection Type</th>
+          <th>Provider</th>
+          <th>Model Format</th>
+      </tr>
+  </thead>
+  <tbody>
+      <tr>
+          <td><code>pydanticai</code></td>
+          <td>OpenAI, Anthropic, Groq, Mistral, Ollama, vLLM, and others</td>
+          <td><code>openai:gpt-5</code>, <code>anthropic:claude-sonnet-4-20250514</code></td>
+      </tr>
+      <tr>
+          <td><code>pydanticai-azure</code></td>
+          <td>Azure OpenAI</td>
+          <td><code>azure:gpt-4o</code></td>
+      </tr>
+      <tr>
+          <td><code>pydanticai-bedrock</code></td>
+          <td>AWS Bedrock</td>
+          <td><code>bedrock:us.anthropic.claude-opus-4-5</code></td>
+      </tr>
+      <tr>
+          <td><code>pydanticai-vertex</code></td>
+          <td>Google Vertex AI</td>
+          <td><code>google-vertex:gemini-2.0-flash</code></td>
+      </tr>
+  </tbody>
+</table>
+<p>Each type has dedicated UI fields in Airflow&rsquo;s connection form (API keys, endpoints, region, project, service account info), all stored in Airflow&rsquo;s secret backend.</p>
+<p>Under the hood, the agent runtime is <a href="https://ai.pydantic.dev/">Pydantic AI</a>, which handles structured output, tool calling, and conversation management with proper typing.</p>
+<h2 id="full-observability">Full Observability</h2>
+<p>Every LLM task logs token usage and tool calls to Airflow&rsquo;s metadata DB. The full conversation history is stored too, so you can audit what the agent did after the fact.</p>
+<p><code>AgentOperator</code> enables tool logging by default. Each tool call appears at INFO level with execution time, arguments at DEBUG level.</p>
+<p><img src="/blog/common-ai-provider/images/tool-logging.png" alt="Tool call logging showing collapsible log groups with timing in the Airflow UI"></p>
+<h2 id="whats-next">What&rsquo;s Next</h2>
+<p>These are directions we&rsquo;re exploring, not commitments. What actually ships depends on what the community needs. Tell us what matters to you.</p>
+<ul>
+<li><strong>Google ADK backend</strong>: <code>AgentOperator</code> with Google&rsquo;s Agent Development Kit as an alternative to Pydantic AI, with session management, ADK callbacks, and multi-agent workflows</li>
+<li><strong>Asset integration</strong>: automatic schema context from Airflow Assets, lineage tracking for LLM-generated queries</li>
+<li><strong>Cost controls (AIBudget)</strong>: token limits and cost caps per task, DAG, or team</li>
+<li><strong>Multi-agent orchestration</strong>: patterns for composing agents across tasks</li>
+<li><strong>Model evaluation</strong>: integration with pydantic-evals for testing LLM behavior</li>
+</ul>
+<h2 id="get-involved">Get Involved</h2>
+<ul>
+<li><a href="https://pypi.org/project/apache-airflow-providers-common-ai/">Install the provider</a> and try it out</li>
+<li><a href="https://airflow.apache.org/registry/providers/common-ai/">Browse the provider on the Airflow Registry</a> for the full module listing</li>
+<li><a href="https://airflow.apache.org/docs/apache-airflow-providers-common-ai/">Read the docs</a> for operator guides, toolset reference, and connection setup</li>
+<li><strong>Give us feedback</strong>: open an <a href="https://github.com/apache/airflow/issues">issue</a>, start a thread on <a href="https://s.apache.org/airflow-slack">Airflow Slack</a>, or post to the <a href="https://airflow.apache.org/community/">dev mailing list</a>. What hooks should we add built-in toolsets for? What&rsquo;s missing?</li>
+<li>The code lives in <a href="https://github.com/apache/airflow/tree/main/providers/common/ai"><code>providers/common/ai/</code></a> in the main Airflow repo</li>
+</ul>
+]]></content>
+  </entry>
+  
   <entry>
     <title>Apache Airflow 3.2.0: Data-Aware Workflows at Scale</title>
     <link href="/blog/airflow-3.2.0/" rel="alternate"/>
     <id>/blog/airflow-3.2.0/</id>
     <published>2026-04-07T00:00:00Z</published>
-    <updated>2026-04-14T02:24:09Z</updated>
+    <updated>2026-04-14T02:30:35Z</updated>
     <author>
       <name>Apache Airflow</name>
     </author>
@@ -230,7 +540,7 @@ export AIRFLOW__CORE__MULTI_TEAM=True
     <link href="/blog/airflow-registry/" rel="alternate"/>
     <id>/blog/airflow-registry/</id>
     <published>2026-03-19T00:00:00Z</published>
-    <updated>2026-04-14T02:24:09Z</updated>
+    <updated>2026-04-14T02:30:35Z</updated>
     <author>
       <name>Apache Airflow</name>
     </author>
@@ -312,7 +622,7 @@ export AIRFLOW__CORE__MULTI_TEAM=True
     <link href="/blog/airflow-survey-2025/" rel="alternate"/>
     <id>/blog/airflow-survey-2025/</id>
     <published>2026-01-22T00:00:00Z</published>
-    <updated>2026-04-14T02:24:09Z</updated>
+    <updated>2026-04-14T02:30:35Z</updated>
     <author>
       <name>Apache Airflow</name>
     </author>
@@ -334,7 +644,7 @@ export AIRFLOW__CORE__MULTI_TEAM=True
     <link href="/blog/airflowctl-0.1.0/" rel="alternate"/>
     <id>/blog/airflowctl-0.1.0/</id>
     <published>2025-10-15T00:00:00Z</published>
-    <updated>2026-04-14T02:24:09Z</updated>
+    <updated>2026-04-14T02:30:35Z</updated>
     <author>
       <name>Apache Airflow</name>
     </author>
@@ -496,7 +806,7 @@ The secure CLI foundation lays the groundwork for Airflow’s next generation. A
     <link href="/blog/airflow-3.1.0/" rel="alternate"/>
     <id>/blog/airflow-3.1.0/</id>
     <published>2025-09-25T00:00:00Z</published>
-    <updated>2026-04-14T02:24:09Z</updated>
+    <updated>2026-04-14T02:30:35Z</updated>
     <author>
       <name>Apache Airflow</name>
     </author>
@@ -681,7 +991,7 @@ human-centered. We can&rsquo;t wait to see what you build with it!</p>
     <link href="/blog/airflow-three-point-oh-is-here/" rel="alternate"/>
     <id>/blog/airflow-three-point-oh-is-here/</id>
     <published>2025-04-22T00:00:00Z</published>
-    <updated>2026-04-14T02:24:09Z</updated>
+    <updated>2026-04-14T02:30:35Z</updated>
     <author>
       <name>Apache Airflow</name>
     </author>
@@ -1087,7 +1397,7 @@ Let’s build the future of data orchestration—together.</p>
     <link href="/blog/airflow-survey-2024/" rel="alternate"/>
     <id>/blog/airflow-survey-2024/</id>
     <published>2025-02-27T00:00:00Z</published>
-    <updated>2026-04-14T02:24:09Z</updated>
+    <updated>2026-04-14T02:30:35Z</updated>
     <author>
       <name>Apache Airflow</name>
     </author>
@@ -1109,7 +1419,7 @@ Let’s build the future of data orchestration—together.</p>
     <link href="/blog/airflow-2.10.0/" rel="alternate"/>
     <id>/blog/airflow-2.10.0/</id>
     <published>2024-08-08T00:00:00Z</published>
-    <updated>2026-04-14T02:24:09Z</updated>
+    <updated>2026-04-14T02:30:35Z</updated>
     <author>
       <name>Apache Airflow</name>
     </author>
@@ -1233,7 +1543,7 @@ executor = &#39;LocalExecutor,KubernetesExecutor,my.custom.module.ExecutorClass:
     <link href="/blog/airflow-2.9.0/" rel="alternate"/>
     <id>/blog/airflow-2.9.0/</id>
     <published>2024-04-08T00:00:00Z</published>
-    <updated>2026-04-14T02:24:09Z</updated>
+    <updated>2026-04-14T02:30:35Z</updated>
     <author>
       <name>Apache Airflow</name>
     </author>
@@ -1355,7 +1665,7 @@ xcom_objectstorage_compression = gzip
     <link href="/blog/fab-oid-vulnerability/" rel="alternate"/>
     <id>/blog/fab-oid-vulnerability/</id>
     <published>2024-02-26T00:00:00Z</published>
-    <updated>2026-04-14T02:24:09Z</updated>
+    <updated>2026-04-14T02:30:35Z</updated>
     <author>
       <name>Apache Airflow</name>
     </author>
@@ -1442,7 +1752,7 @@ where Flask AppBuilder is also used.</p>
     <link href="/blog/airflow-2.8.0/" rel="alternate"/>
     <id>/blog/airflow-2.8.0/</id>
     <published>2023-12-15T00:00:00Z</published>
-    <updated>2026-04-14T02:24:09Z</updated>
+    <updated>2026-04-14T02:30:35Z</updated>
     <author>
       <name>Apache Airflow</name>
     </author>
@@ -1523,7 +1833,7 @@ We care for your security, and &ldquo;secure by default&rdquo; is one of the thi
     <link href="/blog/airflow-survey-2023/" rel="alternate"/>
     <id>/blog/airflow-survey-2023/</id>
     <published>2023-09-21T00:00:00Z</published>
-    <updated>2026-04-14T02:24:09Z</updated>
+    <updated>2026-04-14T02:30:35Z</updated>
     <author>
       <name>Apache Airflow</name>
     </author>
@@ -1542,7 +1852,7 @@ We care for your security, and &ldquo;secure by default&rdquo; is one of the thi
     <link href="/blog/airflow-2.7.0/" rel="alternate"/>
     <id>/blog/airflow-2.7.0/</id>
     <published>2023-08-18T00:00:00Z</published>
-    <updated>2026-04-14T02:24:09Z</updated>
+    <updated>2026-04-14T02:30:35Z</updated>
     <author>
       <name>Apache Airflow</name>
     </author>
@@ -1605,7 +1915,7 @@ The following providers have been moved and require certain minimum providers ve
     <link href="/blog/introducing_setup_teardown/" rel="alternate"/>
     <id>/blog/introducing_setup_teardown/</id>
     <published>2023-08-18T00:00:00Z</published>
-    <updated>2026-04-14T02:24:09Z</updated>
+    <updated>2026-04-14T02:30:35Z</updated>
     <author>
       <name>Apache Airflow</name>
     </author>
@@ -1654,7 +1964,7 @@ The following providers have been moved and require certain minimum providers ve
     <link href="/blog/airflow-2.6.0/" rel="alternate"/>
     <id>/blog/airflow-2.6.0/</id>
     <published>2023-04-30T00:00:00Z</published>
-    <updated>2026-04-14T02:24:09Z</updated>
+    <updated>2026-04-14T02:30:35Z</updated>
     <author>
       <name>Apache Airflow</name>
     </author>
@@ -1714,7 +2024,7 @@ The following providers have been moved and require certain minimum providers ve
     <link href="/blog/airflow-2.5.0/" rel="alternate"/>
     <id>/blog/airflow-2.5.0/</id>
     <published>2022-12-02T00:00:00Z</published>
-    <updated>2026-04-14T02:24:09Z</updated>
+    <updated>2026-04-14T02:30:35Z</updated>
     <author>
       <name>Apache Airflow</name>
     </author>
@@ -1750,7 +2060,7 @@ c. Everything runs in one process, so you can put a breakpoint in your IDE, and
     <link href="/blog/airflow-2.4.0/" rel="alternate"/>
     <id>/blog/airflow-2.4.0/</id>
     <published>2022-09-19T00:00:00Z</published>
-    <updated>2026-04-14T02:24:09Z</updated>
+    <updated>2026-04-14T02:30:35Z</updated>
     <author>
       <name>Apache Airflow</name>
     </author>
@@ -1855,7 +2165,7 @@ c. Everything runs in one process, so you can put a breakpoint in your IDE, and
     <link href="/blog/airflow-survey-2022/" rel="alternate"/>
     <id>/blog/airflow-survey-2022/</id>
     <published>2022-06-17T00:00:00Z</published>
-    <updated>2026-04-14T02:24:09Z</updated>
+    <updated>2026-04-14T02:30:35Z</updated>
     <author>
       <name>Apache Airflow</name>
     </author>
@@ -3546,7 +3856,7 @@ c. Everything runs in one process, so you can put a breakpoint in your IDE, and
     <link href="/blog/airflow_summit_2022/" rel="alternate"/>
     <id>/blog/airflow_summit_2022/</id>
     <published>2022-05-16T00:00:00Z</published>
-    <updated>2026-04-14T02:24:09Z</updated>
+    <updated>2026-04-14T02:30:35Z</updated>
     <author>
       <name>Apache Airflow</name>
     </author>
@@ -3571,7 +3881,7 @@ communities to watch the event and network.</p>
     <link href="/blog/airflow-2.3.0/" rel="alternate"/>
     <id>/blog/airflow-2.3.0/</id>
     <published>2022-04-30T00:00:00Z</published>
-    <updated>2026-04-14T02:24:09Z</updated>
+    <updated>2026-04-14T02:30:35Z</updated>
     <author>
       <name>Apache Airflow</name>
     </author>
@@ -3673,7 +3983,7 @@ Sade&rsquo;s &ldquo;Smooth Operator&rdquo;. Enjoy!</li>
     <link href="/blog/airflow-2.2.0/" rel="alternate"/>
     <id>/blog/airflow-2.2.0/</id>
     <published>2021-10-11T00:00:00Z</published>
-    <updated>2026-04-14T02:24:09Z</updated>
+    <updated>2026-04-14T02:30:35Z</updated>
     <author>
       <name>Apache Airflow</name>
     </author>
@@ -3729,7 +4039,7 @@ Sade&rsquo;s &ldquo;Smooth Operator&rdquo;. Enjoy!</li>
     <link href="/blog/airflow_summit_2021/" rel="alternate"/>
     <id>/blog/airflow_summit_2021/</id>
     <published>2021-03-21T00:00:00Z</published>
-    <updated>2026-04-14T02:24:09Z</updated>
+    <updated>2026-04-14T02:30:35Z</updated>
     <author>
       <name>Apache Airflow</name>
     </author>
@@ -3751,7 +4061,7 @@ participate in its development.</p>
     <link href="/blog/airflow-survey-2020/" rel="alternate"/>
     <id>/blog/airflow-survey-2020/</id>
     <published>2021-03-09T00:00:00Z</published>
-    <updated>2026-04-14T02:24:09Z</updated>
+    <updated>2026-04-14T02:30:35Z</updated>
     <author>
       <name>Apache Airflow</name>
     </author>
@@ -5076,7 +5386,7 @@ to share their experience and tools.</p>
     <link href="/blog/airflow-two-point-oh-is-here/" rel="alternate"/>
     <id>/blog/airflow-two-point-oh-is-here/</id>
     <published>2020-12-17T00:00:00Z</published>
-    <updated>2026-04-14T02:24:09Z</updated>
+    <updated>2026-04-14T02:30:35Z</updated>
     <author>
       <name>Apache Airflow</name>
     </author>
@@ -5170,7 +5480,7 @@ Docs on <a href="http://airflow.apache.org/docs/apache-airflow-providers/package
     <link href="/blog/experience-with-airflow-as-an-outreachy-intern/" rel="alternate"/>
     <id>/blog/experience-with-airflow-as-an-outreachy-intern/</id>
     <published>2020-08-30T00:00:00Z</published>
-    <updated>2026-04-14T02:24:09Z</updated>
+    <updated>2026-04-14T02:30:35Z</updated>
     <author>
       <name>Apache Airflow</name>
     </author>
@@ -5231,7 +5541,7 @@ community that has been made my summer, one to remember.</p>
     <link href="/blog/airflow-1.10.12/" rel="alternate"/>
     <id>/blog/airflow-1.10.12/</id>
     <published>2020-08-25T00:00:00Z</published>
-    <updated>2026-04-14T02:24:09Z</updated>
+    <updated>2026-04-14T02:30:35Z</updated>
     <author>
       <name>Apache Airflow</name>
     </author>
@@ -5352,7 +5662,7 @@ William Tran, Xiaodong Deng, YI FU, Zikun Zhu, dewaldabrie, pulsar314, retornam,
     <link href="/blog/apache-airflow-for-newcomers/" rel="alternate"/>
     <id>/blog/apache-airflow-for-newcomers/</id>
     <published>2020-08-17T00:00:00Z</published>
-    <updated>2026-04-14T02:24:09Z</updated>
+    <updated>2026-04-14T02:30:35Z</updated>
     <author>
       <name>Apache Airflow</name>
     </author>
@@ -5465,7 +5775,7 @@ and <a href="https://github.com/turbaszek">Tomek</a> for all their support. I&rs
     <link href="/blog/implementing-stable-api-for-apache-airflow/" rel="alternate"/>
     <id>/blog/implementing-stable-api-for-apache-airflow/</id>
     <published>2020-07-19T00:00:00Z</published>
-    <updated>2026-04-14T02:24:09Z</updated>
+    <updated>2026-04-14T02:30:35Z</updated>
     <author>
       <name>Apache Airflow</name>
     </author>
@@ -5551,7 +5861,7 @@ wonderful reviews. I&rsquo;m grateful.</p>
     <link href="/blog/airflow-1.10.10/" rel="alternate"/>
     <id>/blog/airflow-1.10.10/</id>
     <published>2020-04-09T00:00:00Z</published>
-    <updated>2026-04-14T02:24:09Z</updated>
+    <updated>2026-04-14T02:30:35Z</updated>
     <author>
       <name>Apache Airflow</name>
     </author>
@@ -5694,7 +6004,7 @@ objc[1873]: +[__NSPlaceholderDate initialize] may have been in progress in anoth
     <link href="/blog/airflow-1.10.8-1.10.9/" rel="alternate"/>
     <id>/blog/airflow-1.10.8-1.10.9/</id>
     <published>2020-02-23T00:00:00Z</published>
-    <updated>2026-04-14T02:24:09Z</updated>
+    <updated>2026-04-14T02:30:35Z</updated>
     <author>
       <name>Apache Airflow</name>
     </author>
@@ -5749,7 +6059,7 @@ for 1.10.* series but would no longer be available from Airflow 2.0</p>
     <link href="/blog/experience-in-google-season-of-docs-2019-with-apache-airflow/" rel="alternate"/>
     <id>/blog/experience-in-google-season-of-docs-2019-with-apache-airflow/</id>
     <published>2019-12-20T00:00:00Z</published>
-    <updated>2026-04-14T02:24:09Z</updated>
+    <updated>2026-04-14T02:30:35Z</updated>
     <author>
       <name>Apache Airflow</name>
     </author>
@@ -5847,7 +6157,7 @@ After a lot of trial and error, we arrived at a version with which both of us co
     <link href="/blog/airflow-survey/" rel="alternate"/>
     <id>/blog/airflow-survey/</id>
     <published>2019-12-11T00:00:00Z</published>
-    <updated>2026-04-14T02:24:09Z</updated>
+    <updated>2026-04-14T02:30:35Z</updated>
     <author>
       <name>Apache Airflow</name>
     </author>
@@ -6650,7 +6960,7 @@ declare DAGs.</p>
     <link href="/blog/announcing-new-website/" rel="alternate"/>
     <id>/blog/announcing-new-website/</id>
     <published>2019-12-11T00:00:00Z</published>
-    <updated>2026-04-14T02:24:09Z</updated>
+    <updated>2026-04-14T02:30:35Z</updated>
     <author>
       <name>Apache Airflow</name>
     </author>
@@ -6682,7 +6992,7 @@ and that its improved accessibility increases adoption and use of Apache Airflow
     <link href="/blog/apache-con-europe-2019-thoughts-and-insights-by-airflow-committers/" rel="alternate"/>
     <id>/blog/apache-con-europe-2019-thoughts-and-insights-by-airflow-committers/</id>
     <published>2019-11-22T00:00:00Z</published>
-    <updated>2026-04-14T02:24:09Z</updated>
+    <updated>2026-04-14T02:30:35Z</updated>
     <author>
       <name>Apache Airflow</name>
     </author>
@@ -6697,7 +7007,7 @@ and that its improved accessibility increases adoption and use of Apache Airflow
     <link href="/blog/documenting-using-local-development-environments/" rel="alternate"/>
     <id>/blog/documenting-using-local-development-environments/</id>
     <published>2019-11-22T00:00:00Z</published>
-    <updated>2026-04-14T02:24:09Z</updated>
+    <updated>2026-04-14T02:30:35Z</updated>
     <author>
       <name>Apache Airflow</name>
     </author>
@@ -6736,7 +7046,7 @@ a team for 3 months.</p>
     <link href="/blog/its-a-breeze-to-develop-apache-airflow/" rel="alternate"/>
     <id>/blog/its-a-breeze-to-develop-apache-airflow/</id>
     <published>2019-11-22T00:00:00Z</published>
-    <updated>2026-04-14T02:24:09Z</updated>
+    <updated>2026-04-14T02:30:35Z</updated>
     <author>
       <name>Apache Airflow</name>
     </author>
diff --git a/blog/introducing_setup_teardown/index.html b/blog/introducing_setup_teardown/index.html
index 5e60bc7adb..bbbcbb1c92 100644
--- a/blog/introducing_setup_teardown/index.html
+++ b/blog/introducing_setup_teardown/index.html
@@ -31,13 +31,13 @@
   <meta property="og:type" content="article">
     <meta property="article:section" content="blog">
     <meta property="article:published_time" content="2023-08-18T00:00:00+00:00">
-    <meta property="article:modified_time" content="2026-04-14T02:24:09+02:00">
+    <meta property="article:modified_time" content="2026-04-14T02:30:35+01:00">
     <meta property="og:image" content="/images/feature-image.png">
 
   <meta itemprop="name" content="Introducing Setup and Teardown tasks">
   <meta itemprop="description" content="An introduction to Setup and Teardown tasks, which are new in Apache Airflow 2.7.0">
   <meta itemprop="datePublished" content="2023-08-18T00:00:00+00:00">
-  <meta itemprop="dateModified" content="2026-04-14T02:24:09+02:00">
+  <meta itemprop="dateModified" content="2026-04-14T02:30:35+01:00">
   <meta itemprop="wordCount" content="678">
   <meta itemprop="image" content="/images/feature-image.png">
 
diff --git a/blog/its-a-breeze-to-develop-apache-airflow/index.html b/blog/its-a-breeze-to-develop-apache-airflow/index.html
index 4c988c9f38..d8ecd41fc8 100644
--- a/blog/its-a-breeze-to-develop-apache-airflow/index.html
+++ b/blog/its-a-breeze-to-develop-apache-airflow/index.html
@@ -31,14 +31,14 @@
   <meta property="og:type" content="article">
     <meta property="article:section" content="blog">
     <meta property="article:published_time" content="2019-11-22T00:00:00+00:00">
-    <meta property="article:modified_time" content="2026-04-14T02:24:09+02:00">
+    <meta property="article:modified_time" content="2026-04-14T02:30:35+01:00">
     <meta property="article:tag" content="Development">
     <meta property="og:image" content="/images/feature-image.png">
 
   <meta itemprop="name" content="It&#39;s a &#34;Breeze&#34; to develop Apache Airflow">
   <meta itemprop="description" content="A Principal Software Engineer&#39;s journey to developer productivity. Learn how Jarek and his team sped up and simplified Airflow development for the community.">
   <meta itemprop="datePublished" content="2019-11-22T00:00:00+00:00">
-  <meta itemprop="dateModified" content="2026-04-14T02:24:09+02:00">
+  <meta itemprop="dateModified" content="2026-04-14T02:30:35+01:00">
   <meta itemprop="wordCount" content="124">
   <meta itemprop="image" content="/images/feature-image.png">
   <meta itemprop="keywords" content="Development">
diff --git a/blog/tags/airflow-summit/index.html b/blog/tags/airflow-summit/index.html
index c137355672..5da27b6edd 100644
--- a/blog/tags/airflow-summit/index.html
+++ b/blog/tags/airflow-summit/index.html
@@ -35,7 +35,7 @@
   <meta itemprop="name" content="Airflow Summit">
   <meta itemprop="description" content="Platform created by the community to programmatically author, schedule and monitor workflows.">
   <meta itemprop="datePublished" content="2022-05-16T00:00:00+00:00">
-  <meta itemprop="dateModified" content="2026-04-14T02:24:09+02:00">
+  <meta itemprop="dateModified" content="2026-04-14T02:30:35+01:00">
   <meta itemprop="image" content="/images/feature-image.png">
 
 
diff --git a/blog/tags/airflow-summit/index.xml b/blog/tags/airflow-summit/index.xml
index efb8fe7a62..6df6ee85e3 100644
--- a/blog/tags/airflow-summit/index.xml
+++ b/blog/tags/airflow-summit/index.xml
@@ -6,7 +6,7 @@
     <description>Recent content in Airflow Summit on Apache Airflow</description>
     <generator>Hugo</generator>
     <language>en</language>
-    <lastBuildDate>Tue, 14 Apr 2026 02:24:09 +0200</lastBuildDate>
+    <lastBuildDate>Tue, 14 Apr 2026 02:30:35 +0100</lastBuildDate>
     <atom:link href="/blog/tags/airflow-summit/index.xml" rel="self" type="application/rss+xml" />
     <item>
       <title>Airflow Summit 2022</title>
diff --git a/blog/tags/community/index.html b/blog/tags/community/index.html
index a09ceec970..80a8e3f3a1 100644
--- a/blog/tags/community/index.html
+++ b/blog/tags/community/index.html
@@ -34,8 +34,8 @@
 
   <meta itemprop="name" content="Community">
   <meta itemprop="description" content="Platform created by the community to programmatically author, schedule and monitor workflows.">
-  <meta itemprop="datePublished" content="2026-03-19T00:00:00+00:00">
-  <meta itemprop="dateModified" content="2026-04-14T02:24:09+02:00">
+  <meta itemprop="datePublished" content="2026-04-14T00:00:00+00:00">
+  <meta itemprop="dateModified" content="2026-04-14T02:30:35+01:00">
   <meta itemprop="image" content="/images/feature-image.png">
 
 
@@ -576,6 +576,60 @@
                     <div class="list-item list-item--wide">
                         
 
+<div class="card">
+    <div class="box-event__blogpost">
+        <div class="box-event__blogpost--metadata">
+            <div class="tags-container">
+                
+                    
+                        <a class="tag" href="/blog/tags/community/">Community</a>
+                    
+                
+                    
+                        <a class="tag" href="/blog/tags/release/">Release</a>
+                    
+                
+            </div>
+            <span class="bodytext__medium--brownish-grey box-event__blogpost--date">Tue, Apr 14, 2026</span>
+        </div>
+        <p class="box-event__blogpost--header">
+            <a href="/blog/common-ai-provider/">
+                Introducing the Common AI Provider: LLM and AI Agent Support for Apache Airflow
+            </a>
+        </p>
+        
+        <p class="box-event__blogpost--author">
+          
+          
+            
+              <a href="https://linkedin.com/in/kaxil" target="_blank" rel="noopener">Kaxil Naik</a>
+            
+            , 
+          
+            
+              <a href="https://linkedin.com/in/pavan-kumar-gopidesu" target="_blank" rel="noopener">Pavan Kumar Gopidesu</a>
+            
+            
+          
+        </p>
+        
+        <p class="box-event__blogpost--description">The Common AI Provider adds LLM and AI agent operators to Apache Airflow with 6 operators, 5 toolsets, and 20&#43; model providers in one package.</p>
+        <div class="mt-auto">
+            <a href="/blog/common-ai-provider/">
+                
+
+<button class="btn-hollow btn-blue bodytext__medium--cerulean-blue" >Read more</button>
+
+            </a>
+        </div>
+    </div>
+</div>
+
+                    </div>
+                
+                    <div class="list-item list-item--wide">
+                        
+
 <div class="card">
     <div class="box-event__blogpost">
         <div class="box-event__blogpost--metadata">
diff --git a/blog/tags/community/index.xml b/blog/tags/community/index.xml
index a43d337bb2..8476484ac4 100644
--- a/blog/tags/community/index.xml
+++ b/blog/tags/community/index.xml
@@ -6,8 +6,15 @@
     <description>Recent content in Community on Apache Airflow</description>
     <generator>Hugo</generator>
     <language>en</language>
-    <lastBuildDate>Tue, 14 Apr 2026 02:24:09 +0200</lastBuildDate>
+    <lastBuildDate>Tue, 14 Apr 2026 02:30:35 +0100</lastBuildDate>
     <atom:link href="/blog/tags/community/index.xml" rel="self" type="application/rss+xml" />
+    <item>
+      <title>Introducing the Common AI Provider: LLM and AI Agent Support for Apache Airflow</title>
+      <link>/blog/common-ai-provider/</link>
+      <pubDate>Tue, 14 Apr 2026 00:00:00 +0000</pubDate>
+      <guid>/blog/common-ai-provider/</guid>
+      <description>&lt;p&gt;At &lt;a href=&#34;https://airflowsummit.org/sessions/2025/airflow-as-an-ai-agents-toolkit-unlocking-1000-integrations-with-mcp/&#34;&gt;Airflow Summit 2025&lt;/a&gt;, we previewed what native AI integration in Apache Airflow could look like. Today we&amp;rsquo;re shipping it.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;https://pypi.org/project/apache-airflow-providers-common-ai/&#34;&gt;&lt;code&gt;apache-airflow-providers-common-ai&lt;/code&gt;&lt;/ [...]
+    </item>
     <item>
       <title>Introducing the Apache Airflow Registry</title>
       <link>/blog/airflow-registry/</link>
diff --git a/blog/tags/development/index.html b/blog/tags/development/index.html
index 48af42bf47..a61a424f18 100644
--- a/blog/tags/development/index.html
+++ b/blog/tags/development/index.html
@@ -35,7 +35,7 @@
   <meta itemprop="name" content="Development">
   <meta itemprop="description" content="Platform created by the community to programmatically author, schedule and monitor workflows.">
   <meta itemprop="datePublished" content="2019-11-22T00:00:00+00:00">
-  <meta itemprop="dateModified" content="2026-04-14T02:24:09+02:00">
+  <meta itemprop="dateModified" content="2026-04-14T02:30:35+01:00">
   <meta itemprop="image" content="/images/feature-image.png">
 
 
diff --git a/blog/tags/development/index.xml b/blog/tags/development/index.xml
index 2518b975e5..26abf3e079 100644
--- a/blog/tags/development/index.xml
+++ b/blog/tags/development/index.xml
@@ -6,7 +6,7 @@
     <description>Recent content in Development on Apache Airflow</description>
     <generator>Hugo</generator>
     <language>en</language>
-    <lastBuildDate>Tue, 14 Apr 2026 02:24:09 +0200</lastBuildDate>
+    <lastBuildDate>Tue, 14 Apr 2026 02:30:35 +0100</lastBuildDate>
     <atom:link href="/blog/tags/development/index.xml" rel="self" type="application/rss+xml" />
     <item>
       <title>Documenting using local development environment</title>
diff --git a/blog/tags/documentation/index.html b/blog/tags/documentation/index.html
index b5a55cee25..ae2f7ff7a1 100644
--- a/blog/tags/documentation/index.html
+++ b/blog/tags/documentation/index.html
@@ -35,7 +35,7 @@
   <meta itemprop="name" content="Documentation">
   <meta itemprop="description" content="Platform created by the community to programmatically author, schedule and monitor workflows.">
   <meta itemprop="datePublished" content="2019-12-20T00:00:00+00:00">
-  <meta itemprop="dateModified" content="2026-04-14T02:24:09+02:00">
+  <meta itemprop="dateModified" content="2026-04-14T02:30:35+01:00">
   <meta itemprop="image" content="/images/feature-image.png">
 
 
diff --git a/blog/tags/documentation/index.xml b/blog/tags/documentation/index.xml
index e9fa8ba2f7..6d77f735e0 100644
--- a/blog/tags/documentation/index.xml
+++ b/blog/tags/documentation/index.xml
@@ -6,7 +6,7 @@
     <description>Recent content in Documentation on Apache Airflow</description>
     <generator>Hugo</generator>
     <language>en</language>
-    <lastBuildDate>Tue, 14 Apr 2026 02:24:09 +0200</lastBuildDate>
+    <lastBuildDate>Tue, 14 Apr 2026 02:30:35 +0100</lastBuildDate>
     <atom:link href="/blog/tags/documentation/index.xml" rel="self" type="application/rss+xml" />
     <item>
       <title>Experience in Google Season of Docs 2019 with Apache Airflow</title>
diff --git a/blog/tags/release/index.html b/blog/tags/release/index.html
index c6bb4b69c2..b876712268 100644
--- a/blog/tags/release/index.html
+++ b/blog/tags/release/index.html
@@ -34,8 +34,8 @@
 
   <meta itemprop="name" content="Release">
   <meta itemprop="description" content="Platform created by the community to programmatically author, schedule and monitor workflows.">
-  <meta itemprop="datePublished" content="2026-04-07T00:00:00+00:00">
-  <meta itemprop="dateModified" content="2026-04-14T02:24:09+02:00">
+  <meta itemprop="datePublished" content="2026-04-14T00:00:00+00:00">
+  <meta itemprop="dateModified" content="2026-04-14T02:30:35+01:00">
   <meta itemprop="image" content="/images/feature-image.png">
 
 
@@ -576,6 +576,60 @@
                     <div class="list-item list-item--wide">
                         
 
+<div class="card">
+    <div class="box-event__blogpost">
+        <div class="box-event__blogpost--metadata">
+            <div class="tags-container">
+                
+                    
+                        <a class="tag" href="/blog/tags/community/">Community</a>
+                    
+                
+                    
+                        <a class="tag" href="/blog/tags/release/">Release</a>
+                    
+                
+            </div>
+            <span class="bodytext__medium--brownish-grey box-event__blogpost--date">Tue, Apr 14, 2026</span>
+        </div>
+        <p class="box-event__blogpost--header">
+            <a href="/blog/common-ai-provider/">
+                Introducing the Common AI Provider: LLM and AI Agent Support for Apache Airflow
+            </a>
+        </p>
+        
+        <p class="box-event__blogpost--author">
+          
+          
+            
+              <a href="https://linkedin.com/in/kaxil" target="_blank" rel="noopener">Kaxil Naik</a>
+            
+            , 
+          
+            
+              <a href="https://linkedin.com/in/pavan-kumar-gopidesu" target="_blank" rel="noopener">Pavan Kumar Gopidesu</a>
+            
+            
+          
+        </p>
+        
+        <p class="box-event__blogpost--description">The Common AI Provider adds LLM and AI agent operators to Apache Airflow with 6 operators, 5 toolsets, and 20&#43; model providers in one package.</p>
+        <div class="mt-auto">
+            <a href="/blog/common-ai-provider/">
+                
+
+<button class="btn-hollow btn-blue bodytext__medium--cerulean-blue" >Read more</button>
+
+            </a>
+        </div>
+    </div>
+</div>
+
+                    </div>
+                
+                    <div class="list-item list-item--wide">
+                        
+
 <div class="card">
     <div class="box-event__blogpost">
         <div class="box-event__blogpost--metadata">
diff --git a/blog/tags/release/index.xml b/blog/tags/release/index.xml
index b7c7f96e35..0928285b34 100644
--- a/blog/tags/release/index.xml
+++ b/blog/tags/release/index.xml
@@ -6,8 +6,15 @@
     <description>Recent content in Release on Apache Airflow</description>
     <generator>Hugo</generator>
     <language>en</language>
-    <lastBuildDate>Tue, 14 Apr 2026 02:24:09 +0200</lastBuildDate>
+    <lastBuildDate>Tue, 14 Apr 2026 02:30:35 +0100</lastBuildDate>
     <atom:link href="/blog/tags/release/index.xml" rel="self" type="application/rss+xml" />
+    <item>
+      <title>Introducing the Common AI Provider: LLM and AI Agent Support for Apache Airflow</title>
+      <link>/blog/common-ai-provider/</link>
+      <pubDate>Tue, 14 Apr 2026 00:00:00 +0000</pubDate>
+      <guid>/blog/common-ai-provider/</guid>
+      <description>&lt;p&gt;At &lt;a href=&#34;https://airflowsummit.org/sessions/2025/airflow-as-an-ai-agents-toolkit-unlocking-1000-integrations-with-mcp/&#34;&gt;Airflow Summit 2025&lt;/a&gt;, we previewed what native AI integration in Apache Airflow could look like. Today we&amp;rsquo;re shipping it.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;https://pypi.org/project/apache-airflow-providers-common-ai/&#34;&gt;&lt;code&gt;apache-airflow-providers-common-ai&lt;/code&gt;&lt;/ [...]
+    </item>
     <item>
       <title>Apache Airflow 3.2.0: Data-Aware Workflows at Scale</title>
       <link>/blog/airflow-3.2.0/</link>
diff --git a/blog/tags/rest-api/index.html b/blog/tags/rest-api/index.html
index 8842f9b882..ee53019e31 100644
--- a/blog/tags/rest-api/index.html
+++ b/blog/tags/rest-api/index.html
@@ -35,7 +35,7 @@
   <meta itemprop="name" content="REST API">
   <meta itemprop="description" content="Platform created by the community to programmatically author, schedule and monitor workflows.">
   <meta itemprop="datePublished" content="2020-07-19T00:00:00+00:00">
-  <meta itemprop="dateModified" content="2026-04-14T02:24:09+02:00">
+  <meta itemprop="dateModified" content="2026-04-14T02:30:35+01:00">
   <meta itemprop="image" content="/images/feature-image.png">
 
 
diff --git a/blog/tags/rest-api/index.xml b/blog/tags/rest-api/index.xml
index a651282254..86b9591ba5 100644
--- a/blog/tags/rest-api/index.xml
+++ b/blog/tags/rest-api/index.xml
@@ -6,7 +6,7 @@
     <description>Recent content in REST API on Apache Airflow</description>
     <generator>Hugo</generator>
     <language>en</language>
-    <lastBuildDate>Tue, 14 Apr 2026 02:24:09 +0200</lastBuildDate>
+    <lastBuildDate>Tue, 14 Apr 2026 02:30:35 +0100</lastBuildDate>
     <atom:link href="/blog/tags/rest-api/index.xml" rel="self" type="application/rss+xml" />
     <item>
       <title>Implementing Stable API for Apache Airflow</title>
diff --git a/blog/tags/survey/index.html b/blog/tags/survey/index.html
index 938c6a6bd5..1aba8c0ec5 100644
--- a/blog/tags/survey/index.html
+++ b/blog/tags/survey/index.html
@@ -35,7 +35,7 @@
   <meta itemprop="name" content="Survey">
   <meta itemprop="description" content="Platform created by the community to programmatically author, schedule and monitor workflows.">
   <meta itemprop="datePublished" content="2026-01-22T00:00:00+00:00">
-  <meta itemprop="dateModified" content="2026-04-14T02:24:09+02:00">
+  <meta itemprop="dateModified" content="2026-04-14T02:30:35+01:00">
   <meta itemprop="image" content="/images/feature-image.png">
 
 
diff --git a/blog/tags/survey/index.xml b/blog/tags/survey/index.xml
index 311e13aa42..614dc76d85 100644
--- a/blog/tags/survey/index.xml
+++ b/blog/tags/survey/index.xml
@@ -6,7 +6,7 @@
     <description>Recent content in Survey on Apache Airflow</description>
     <generator>Hugo</generator>
     <language>en</language>
-    <lastBuildDate>Tue, 14 Apr 2026 02:24:09 +0200</lastBuildDate>
+    <lastBuildDate>Tue, 14 Apr 2026 02:30:35 +0100</lastBuildDate>
     <atom:link href="/blog/tags/survey/index.xml" rel="self" type="application/rss+xml" />
     <item>
       <title>Airflow Survey 2025</title>
diff --git a/blog/tags/users/index.html b/blog/tags/users/index.html
index 6a2cc15609..a070897abe 100644
--- a/blog/tags/users/index.html
+++ b/blog/tags/users/index.html
@@ -35,7 +35,7 @@
   <meta itemprop="name" content="Users">
   <meta itemprop="description" content="Platform created by the community to programmatically author, schedule and monitor workflows.">
   <meta itemprop="datePublished" content="2026-01-22T00:00:00+00:00">
-  <meta itemprop="dateModified" content="2026-04-14T02:24:09+02:00">
+  <meta itemprop="dateModified" content="2026-04-14T02:30:35+01:00">
   <meta itemprop="image" content="/images/feature-image.png">
 
 
diff --git a/blog/tags/users/index.xml b/blog/tags/users/index.xml
index 8445044762..4e231ab5ad 100644
--- a/blog/tags/users/index.xml
+++ b/blog/tags/users/index.xml
@@ -6,7 +6,7 @@
     <description>Recent content in Users on Apache Airflow</description>
     <generator>Hugo</generator>
     <language>en</language>
-    <lastBuildDate>Tue, 14 Apr 2026 02:24:09 +0200</lastBuildDate>
+    <lastBuildDate>Tue, 14 Apr 2026 02:30:35 +0100</lastBuildDate>
     <atom:link href="/blog/tags/users/index.xml" rel="self" type="application/rss+xml" />
     <item>
       <title>Airflow Survey 2025</title>
diff --git a/blog/tags/vulnerabilities/index.html b/blog/tags/vulnerabilities/index.html
index b80292a247..41a38db5d8 100644
--- a/blog/tags/vulnerabilities/index.html
+++ b/blog/tags/vulnerabilities/index.html
@@ -35,7 +35,7 @@
   <meta itemprop="name" content="Vulnerabilities">
   <meta itemprop="description" content="Platform created by the community to programmatically author, schedule and monitor workflows.">
   <meta itemprop="datePublished" content="2024-02-26T00:00:00+00:00">
-  <meta itemprop="dateModified" content="2026-04-14T02:24:09+02:00">
+  <meta itemprop="dateModified" content="2026-04-14T02:30:35+01:00">
   <meta itemprop="image" content="/images/feature-image.png">
 
 
diff --git a/blog/tags/vulnerabilities/index.xml b/blog/tags/vulnerabilities/index.xml
index b8583b560f..cf1c1dc7c1 100644
--- a/blog/tags/vulnerabilities/index.xml
+++ b/blog/tags/vulnerabilities/index.xml
@@ -6,7 +6,7 @@
     <description>Recent content in Vulnerabilities on Apache Airflow</description>
     <generator>Hugo</generator>
     <language>en</language>
-    <lastBuildDate>Tue, 14 Apr 2026 02:24:09 +0200</lastBuildDate>
+    <lastBuildDate>Tue, 14 Apr 2026 02:30:35 +0100</lastBuildDate>
     <atom:link href="/blog/tags/vulnerabilities/index.xml" rel="self" type="application/rss+xml" />
     <item>
       <title>Vulnerability in long deprecated OpenID authentication method in Flask AppBuilder</title>
diff --git a/code-of-conduct/index.html b/code-of-conduct/index.html
index b6d558c690..c2e51a8b26 100644
--- a/code-of-conduct/index.html
+++ b/code-of-conduct/index.html
@@ -36,7 +36,7 @@ Airflow Slack Guidelines Airflow Slack abides by The Apache Foundation’s Code
   <meta itemprop="name" content="Code of Conduct">
   <meta itemprop="description" content="Community Code of Conduct All Airflow Community groups abide by The Apache Software Foundation’s (ASF) Code of Conduct . Below, please find a breakdown of how that code applies to Airflow Slack and in-person Meetups
 Airflow Slack Guidelines Airflow Slack abides by The Apache Foundation’s Code of Conduct . In addition to those primary guidelines, these policies are specifically for Airflow Slack. The Airflow Slack community contains 40,000&#43; members and continues to grow. Because this community is run by the very practitioners who build in Airflow daily, our members feel a sense of camaraderie, ownership, and comfortability here.  ">
-  <meta itemprop="dateModified" content="2026-04-14T02:24:09+02:00">
+  <meta itemprop="dateModified" content="2026-04-14T02:30:35+01:00">
   <meta itemprop="wordCount" content="1576">
   <meta itemprop="image" content="/images/feature-image.png">
 
diff --git a/community/index.html b/community/index.html
index ec5b87593a..30493e8766 100644
--- a/community/index.html
+++ b/community/index.html
@@ -34,7 +34,7 @@
 
   <meta itemprop="name" content="Community">
   <meta itemprop="description" content="Want to contribute? Join the Dev list The Dev list is the preferred channel for announcements, proposals and votes. Manage your subscription:">
-  <meta itemprop="dateModified" content="2026-04-14T02:24:09+02:00">
+  <meta itemprop="dateModified" content="2026-04-14T02:30:35+01:00">
   <meta itemprop="wordCount" content="560">
   <meta itemprop="image" content="/images/feature-image.png">
 
diff --git a/community/resources/index.html b/community/resources/index.html
index 57dc67be6f..a9d19237dc 100644
--- a/community/resources/index.html
+++ b/community/resources/index.html
@@ -30,12 +30,12 @@
   <meta property="og:locale" content="en">
   <meta property="og:type" content="article">
     <meta property="article:section" content="community">
-    <meta property="article:modified_time" content="2026-04-14T02:24:09+02:00">
+    <meta property="article:modified_time" content="2026-04-14T02:30:35+01:00">
     <meta property="og:image" content="/images/feature-image.png">
 
   <meta itemprop="name" content="Apache Airflow">
   <meta itemprop="description" content="Promo Materials Download official Apache Airflow branding materials, including logos and banners, to accurately represent and promote the project. Airflow logos Logo SVGs (light): Horizontal, Small, Icon Logo SVGs (dark): Horizontal, Small, Icon Brandbook Drawio Diagrams Lucidchart Diagrams Promo stuff Proposed Logo Redesign">
-  <meta itemprop="dateModified" content="2026-04-14T02:24:09+02:00">
+  <meta itemprop="dateModified" content="2026-04-14T02:30:35+01:00">
   <meta itemprop="wordCount" content="43">
   <meta itemprop="image" content="/images/feature-image.png">
 
diff --git a/docs/index.html b/docs/index.html
index 322b9dfc1a..eb626238fd 100644
--- a/docs/index.html
+++ b/docs/index.html
@@ -36,7 +36,7 @@ Apache Airflow CTL (airflowctl) Apache Airflow CTL (airflowctl) is a command-lin
   <meta itemprop="name" content="Documentation">
   <meta itemprop="description" content="Documentation Apache Airflow® Apache Airflow Core, which includes webserver, scheduler, CLI and other components that are needed for minimal Airflow installation. Read the documentation »
 Apache Airflow CTL (airflowctl) Apache Airflow CTL (airflowctl) is a command-line interface (CLI) for Apache Airflow that interacts exclusively with the Airflow REST API. It provides a secure, auditable, and consistent way to manage Airflow deployments — without direct access to the metadata database. Read the documentation »">
-  <meta itemprop="dateModified" content="2026-04-14T02:24:09+02:00">
+  <meta itemprop="dateModified" content="2026-04-14T02:30:35+01:00">
   <meta itemprop="wordCount" content="589">
   <meta itemprop="image" content="/images/feature-image.png">
 
diff --git a/ecosystem/index.html b/ecosystem/index.html
index fb7f40fab0..ba95dfdbe2 100644
--- a/ecosystem/index.html
+++ b/ecosystem/index.html
@@ -36,7 +36,7 @@ If you would you like to be included on this page, please reach out to the Apach
   <meta itemprop="name" content="Ecosystem">
   <meta itemprop="description" content=" Ecosystem These resources and services are not maintained, nor endorsed by the Apache Airflow® Community and Apache Airflow project (maintained by the Committers and the Airflow PMC). Use them at your sole discretion. The community does not verify the licences nor validity of those tools, so it’s your responsibility to verify them.
 If you would you like to be included on this page, please reach out to the Apache Airflow dev or user mailing list and let us know or simply open a Pull Request to that page.">
-  <meta itemprop="dateModified" content="2026-04-14T02:24:09+02:00">
+  <meta itemprop="dateModified" content="2026-04-14T02:30:35+01:00">
   <meta itemprop="wordCount" content="2258">
   <meta itemprop="image" content="/images/feature-image.png">
 
diff --git a/index.html b/index.html
index cba3676684..1eb85f1ebf 100644
--- a/index.html
+++ b/index.html
@@ -34,7 +34,7 @@
 
   <meta itemprop="name" content="Home">
   <meta itemprop="description" content="Platform created by the community to programmatically author, schedule and monitor workflows.">
-  <meta itemprop="dateModified" content="2026-04-14T02:24:09+02:00">
+  <meta itemprop="dateModified" content="2026-04-14T02:30:35+01:00">
   <meta itemprop="image" content="/images/feature-image.png">
 
 
@@ -1314,45 +1314,44 @@
     <div class="blog-snippet-list">
         
         <article class="blog-snippet-item">
-            <time datetime="2026-04-07 00:00:00 &#43;0000 UTC">
-                Apr 7, 2026
+            <time datetime="2026-04-14 00:00:00 &#43;0000 UTC">
+                Apr 14, 2026
             </time>
 
             <h3 class="blog-snippet-title">
-                <a href="/blog/airflow-3.2.0/">Apache Airflow 3.2.0: Data-Aware Workflows at Scale</a>
+                <a href="/blog/common-ai-provider/">Introducing the Common AI Provider: LLM and AI Agent Support for Apache Airflow</a>
             </h3>
 
             <p class="blog-snippet-excerpt">
-                We&rsquo;re proud to announce the release of Apache Airflow 3.2.0! Airflow 3.1 puts humans at the center of automated workflows. 3.2 brings …
+                At Airflow Summit 2025, we previewed what native AI integration in Apache Airflow could look like. Today we&rsquo;re shipping it. …
             </p>
         </article>
         
         <article class="blog-snippet-item">
-            <time datetime="2026-03-19 00:00:00 &#43;0000 UTC">
-                Mar 19, 2026
+            <time datetime="2026-04-07 00:00:00 &#43;0000 UTC">
+                Apr 7, 2026
             </time>
 
             <h3 class="blog-snippet-title">
-                <a href="/blog/airflow-registry/">Introducing the Apache Airflow Registry</a>
+                <a href="/blog/airflow-3.2.0/">Apache Airflow 3.2.0: Data-Aware Workflows at Scale</a>
             </h3>
 
             <p class="blog-snippet-excerpt">
-                Today we&rsquo;re launching the Apache Airflow Registry — a searchable catalog of every official Airflow provider and its modules, live at …
+                We&rsquo;re proud to announce the release of Apache Airflow 3.2.0! Airflow 3.1 puts humans at the center of automated workflows. 3.2 brings …
             </p>
         </article>
         
         <article class="blog-snippet-item">
-            <time datetime="2026-01-22 00:00:00 &#43;0000 UTC">
-                Jan 22, 2026
+            <time datetime="2026-03-19 00:00:00 &#43;0000 UTC">
+                Mar 19, 2026
             </time>
 
             <h3 class="blog-snippet-title">
-                <a href="/blog/airflow-survey-2025/">Airflow Survey 2025</a>
+                <a href="/blog/airflow-registry/">Introducing the Apache Airflow Registry</a>
             </h3>
 
             <p class="blog-snippet-excerpt">
-                
-The interactive report is hosted by Astronomer. The Apache Airflow community thanks Astronomer for running this survey, for sponsoring it …
+                Today we&rsquo;re launching the Apache Airflow Registry — a searchable catalog of every official Airflow provider and its modules, live at …
             </p>
         </article>
         
diff --git a/index.xml b/index.xml
index cf982ff5df..e47157a0ab 100644
--- a/index.xml
+++ b/index.xml
@@ -7,6 +7,13 @@
     <generator>Hugo</generator>
     <language>en</language>
     <atom:link href="/index.xml" rel="self" type="application/rss+xml" />
+    <item>
+      <title>Introducing the Common AI Provider: LLM and AI Agent Support for Apache Airflow</title>
+      <link>/blog/common-ai-provider/</link>
+      <pubDate>Tue, 14 Apr 2026 00:00:00 +0000</pubDate>
+      <guid>/blog/common-ai-provider/</guid>
+      <description>&lt;p&gt;At &lt;a href=&#34;https://airflowsummit.org/sessions/2025/airflow-as-an-ai-agents-toolkit-unlocking-1000-integrations-with-mcp/&#34;&gt;Airflow Summit 2025&lt;/a&gt;, we previewed what native AI integration in Apache Airflow could look like. Today we&amp;rsquo;re shipping it.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;https://pypi.org/project/apache-airflow-providers-common-ai/&#34;&gt;&lt;code&gt;apache-airflow-providers-common-ai&lt;/code&gt;&lt;/ [...]
+    </item>
     <item>
       <title>Apache Airflow 3.2.0: Data-Aware Workflows at Scale</title>
       <link>/blog/airflow-3.2.0/</link>
diff --git a/meetups/index.html b/meetups/index.html
index cc86e74eb4..6138d3720d 100644
--- a/meetups/index.html
+++ b/meetups/index.html
@@ -34,7 +34,7 @@
 
   <meta itemprop="name" content="Meetups">
   <meta itemprop="description" content="Platform created by the community to programmatically author, schedule and monitor workflows.">
-  <meta itemprop="dateModified" content="2026-04-14T02:24:09+02:00">
+  <meta itemprop="dateModified" content="2026-04-14T02:30:35+01:00">
   <meta itemprop="image" content="/images/feature-image.png">
 
 
diff --git a/privacy-notice/index.html b/privacy-notice/index.html
index 65eacb74ba..705057cdf7 100644
--- a/privacy-notice/index.html
+++ b/privacy-notice/index.html
@@ -34,7 +34,7 @@
 
   <meta itemprop="name" content="Privacy notice">
   <meta itemprop="description" content="Privacy Notice The website follows the Privacy Policy of the Apache Software Foundation.">
-  <meta itemprop="dateModified" content="2026-04-14T02:24:09+02:00">
+  <meta itemprop="dateModified" content="2026-04-14T02:30:35+01:00">
   <meta itemprop="wordCount" content="13">
   <meta itemprop="image" content="/images/feature-image.png">
 
diff --git a/roadmap/index.html b/roadmap/index.html
index 5920bc4206..ecc782be8d 100644
--- a/roadmap/index.html
+++ b/roadmap/index.html
@@ -36,7 +36,7 @@
   <meta itemprop="name" content="Roadmap">
   <meta itemprop="description" content="TODO: Roadmap page is temporarily hidden. When the content is ready, re-add the page by putting the following code in the frontmatter:
 --- title: &#34;Roadmap&#34; linkTitle: &#34;Roadmap&#34; showSideNav: false menu: main: weight: 15 --- Primary Heading A One thing to wrap your head around (it may not be very intuitive for everyone at first) is that this Airflow Python script is really just a configuration file specifying the DAG’s structure as code. The actual tasks defined here will run in a different context from the context of this script. Different tasks run on different workers at different points in time, which  [...]
-  <meta itemprop="dateModified" content="2026-04-14T02:24:09+02:00">
+  <meta itemprop="dateModified" content="2026-04-14T02:30:35+01:00">
   <meta itemprop="wordCount" content="734">
   <meta itemprop="image" content="/images/feature-image.png">
 
diff --git a/search/index.html b/search/index.html
index bbb86f39eb..992385dba7 100644
--- a/search/index.html
+++ b/search/index.html
@@ -29,12 +29,12 @@
   <meta property="og:description" content="Platform created by the community to programmatically author, schedule and monitor workflows.">
   <meta property="og:locale" content="en">
   <meta property="og:type" content="article">
-    <meta property="article:modified_time" content="2026-04-14T02:24:09+02:00">
+    <meta property="article:modified_time" content="2026-04-14T02:30:35+01:00">
     <meta property="og:image" content="/images/feature-image.png">
 
   <meta itemprop="name" content="Search Results">
   <meta itemprop="description" content="Platform created by the community to programmatically author, schedule and monitor workflows.">
-  <meta itemprop="dateModified" content="2026-04-14T02:24:09+02:00">
+  <meta itemprop="dateModified" content="2026-04-14T02:30:35+01:00">
   <meta itemprop="image" content="/images/feature-image.png">
 
 
diff --git a/sitemap.xml b/sitemap.xml
index 59c63412d3..f1b91736f3 100644
--- a/sitemap.xml
+++ b/sitemap.xml
@@ -3,242 +3,245 @@
   xmlns:xhtml="http://www.w3.org/1999/xhtml">
   <url>
     <loc>/docs/</loc>
-    <lastmod>2026-04-14T02:24:09+02:00</lastmod>
+    <lastmod>2026-04-14T02:30:35+01:00</lastmod>
   </url><url>
-    <loc>/blog/airflow-3.2.0/</loc>
-    <lastmod>2026-04-14T02:24:09+02:00</lastmod>
+    <loc>/blog/tags/community/</loc>
+    <lastmod>2026-04-14T02:30:35+01:00</lastmod>
+  </url><url>
+    <loc>/blog/common-ai-provider/</loc>
+    <lastmod>2026-04-14T02:30:35+01:00</lastmod>
   </url><url>
     <loc>/blog/tags/release/</loc>
-    <lastmod>2026-04-14T02:24:09+02:00</lastmod>
+    <lastmod>2026-04-14T02:30:35+01:00</lastmod>
   </url><url>
     <loc>/tags/</loc>
-    <lastmod>2026-04-14T02:24:09+02:00</lastmod>
+    <lastmod>2026-04-14T02:30:35+01:00</lastmod>
   </url><url>
-    <loc>/blog/tags/community/</loc>
-    <lastmod>2026-04-14T02:24:09+02:00</lastmod>
+    <loc>/blog/airflow-3.2.0/</loc>
+    <lastmod>2026-04-14T02:30:35+01:00</lastmod>
   </url><url>
     <loc>/blog/airflow-registry/</loc>
-    <lastmod>2026-04-14T02:24:09+02:00</lastmod>
+    <lastmod>2026-04-14T02:30:35+01:00</lastmod>
   </url><url>
     <loc>/blog/airflow-survey-2025/</loc>
-    <lastmod>2026-04-14T02:24:09+02:00</lastmod>
+    <lastmod>2026-04-14T02:30:35+01:00</lastmod>
   </url><url>
     <loc>/blog/tags/survey/</loc>
-    <lastmod>2026-04-14T02:24:09+02:00</lastmod>
+    <lastmod>2026-04-14T02:30:35+01:00</lastmod>
   </url><url>
     <loc>/blog/tags/users/</loc>
-    <lastmod>2026-04-14T02:24:09+02:00</lastmod>
+    <lastmod>2026-04-14T02:30:35+01:00</lastmod>
   </url><url>
     <loc>/blog/airflowctl-0.1.0/</loc>
-    <lastmod>2026-04-14T02:24:09+02:00</lastmod>
+    <lastmod>2026-04-14T02:30:35+01:00</lastmod>
   </url><url>
     <loc>/blog/airflow-3.1.0/</loc>
-    <lastmod>2026-04-14T02:24:09+02:00</lastmod>
+    <lastmod>2026-04-14T02:30:35+01:00</lastmod>
   </url><url>
     <loc>/blog/airflow-three-point-oh-is-here/</loc>
-    <lastmod>2026-04-14T02:24:09+02:00</lastmod>
+    <lastmod>2026-04-14T02:30:35+01:00</lastmod>
   </url><url>
     <loc>/blog/airflow-survey-2024/</loc>
-    <lastmod>2026-04-14T02:24:09+02:00</lastmod>
+    <lastmod>2026-04-14T02:30:35+01:00</lastmod>
   </url><url>
     <loc>/blog/airflow-2.10.0/</loc>
-    <lastmod>2026-04-14T02:24:09+02:00</lastmod>
+    <lastmod>2026-04-14T02:30:35+01:00</lastmod>
   </url><url>
     <loc>/blog/airflow-2.9.0/</loc>
-    <lastmod>2026-04-14T02:24:09+02:00</lastmod>
+    <lastmod>2026-04-14T02:30:35+01:00</lastmod>
   </url><url>
     <loc>/blog/tags/vulnerabilities/</loc>
-    <lastmod>2026-04-14T02:24:09+02:00</lastmod>
+    <lastmod>2026-04-14T02:30:35+01:00</lastmod>
   </url><url>
     <loc>/blog/fab-oid-vulnerability/</loc>
-    <lastmod>2026-04-14T02:24:09+02:00</lastmod>
+    <lastmod>2026-04-14T02:30:35+01:00</lastmod>
   </url><url>
     <loc>/blog/airflow-2.8.0/</loc>
-    <lastmod>2026-04-14T02:24:09+02:00</lastmod>
+    <lastmod>2026-04-14T02:30:35+01:00</lastmod>
   </url><url>
     <loc>/blog/airflow-survey-2023/</loc>
-    <lastmod>2026-04-14T02:24:09+02:00</lastmod>
+    <lastmod>2026-04-14T02:30:35+01:00</lastmod>
   </url><url>
     <loc>/blog/airflow-2.7.0/</loc>
-    <lastmod>2026-04-14T02:24:09+02:00</lastmod>
+    <lastmod>2026-04-14T02:30:35+01:00</lastmod>
   </url><url>
     <loc>/blog/introducing_setup_teardown/</loc>
-    <lastmod>2026-04-14T02:24:09+02:00</lastmod>
+    <lastmod>2026-04-14T02:30:35+01:00</lastmod>
   </url><url>
     <loc>/blog/airflow-2.6.0/</loc>
-    <lastmod>2026-04-14T02:24:09+02:00</lastmod>
+    <lastmod>2026-04-14T02:30:35+01:00</lastmod>
   </url><url>
     <loc>/blog/airflow-2.5.0/</loc>
-    <lastmod>2026-04-14T02:24:09+02:00</lastmod>
+    <lastmod>2026-04-14T02:30:35+01:00</lastmod>
   </url><url>
     <loc>/blog/airflow-2.4.0/</loc>
-    <lastmod>2026-04-14T02:24:09+02:00</lastmod>
+    <lastmod>2026-04-14T02:30:35+01:00</lastmod>
   </url><url>
     <loc>/blog/airflow-survey-2022/</loc>
-    <lastmod>2026-04-14T02:24:09+02:00</lastmod>
+    <lastmod>2026-04-14T02:30:35+01:00</lastmod>
   </url><url>
     <loc>/blog/tags/airflow-summit/</loc>
-    <lastmod>2026-04-14T02:24:09+02:00</lastmod>
+    <lastmod>2026-04-14T02:30:35+01:00</lastmod>
   </url><url>
     <loc>/blog/airflow_summit_2022/</loc>
-    <lastmod>2026-04-14T02:24:09+02:00</lastmod>
+    <lastmod>2026-04-14T02:30:35+01:00</lastmod>
   </url><url>
     <loc>/blog/airflow-2.3.0/</loc>
-    <lastmod>2026-04-14T02:24:09+02:00</lastmod>
+    <lastmod>2026-04-14T02:30:35+01:00</lastmod>
   </url><url>
     <loc>/blog/airflow-2.2.0/</loc>
-    <lastmod>2026-04-14T02:24:09+02:00</lastmod>
+    <lastmod>2026-04-14T02:30:35+01:00</lastmod>
   </url><url>
     <loc>/blog/airflow_summit_2021/</loc>
-    <lastmod>2026-04-14T02:24:09+02:00</lastmod>
+    <lastmod>2026-04-14T02:30:35+01:00</lastmod>
   </url><url>
     <loc>/blog/airflow-survey-2020/</loc>
-    <lastmod>2026-04-14T02:24:09+02:00</lastmod>
+    <lastmod>2026-04-14T02:30:35+01:00</lastmod>
   </url><url>
     <loc>/blog/airflow-two-point-oh-is-here/</loc>
-    <lastmod>2026-04-14T02:24:09+02:00</lastmod>
+    <lastmod>2026-04-14T02:30:35+01:00</lastmod>
   </url><url>
     <loc>/blog/experience-with-airflow-as-an-outreachy-intern/</loc>
-    <lastmod>2026-04-14T02:24:09+02:00</lastmod>
+    <lastmod>2026-04-14T02:30:35+01:00</lastmod>
   </url><url>
     <loc>/blog/airflow-1.10.12/</loc>
-    <lastmod>2026-04-14T02:24:09+02:00</lastmod>
+    <lastmod>2026-04-14T02:30:35+01:00</lastmod>
   </url><url>
     <loc>/blog/apache-airflow-for-newcomers/</loc>
-    <lastmod>2026-04-14T02:24:09+02:00</lastmod>
+    <lastmod>2026-04-14T02:30:35+01:00</lastmod>
   </url><url>
     <loc>/announcements/</loc>
-    <lastmod>2026-04-14T02:24:09+02:00</lastmod>
+    <lastmod>2026-04-14T02:30:35+01:00</lastmod>
   </url><url>
     <loc>/blog/implementing-stable-api-for-apache-airflow/</loc>
-    <lastmod>2026-04-14T02:24:09+02:00</lastmod>
+    <lastmod>2026-04-14T02:30:35+01:00</lastmod>
   </url><url>
     <loc>/blog/tags/rest-api/</loc>
-    <lastmod>2026-04-14T02:24:09+02:00</lastmod>
+    <lastmod>2026-04-14T02:30:35+01:00</lastmod>
   </url><url>
     <loc>/blog/airflow-1.10.10/</loc>
-    <lastmod>2026-04-14T02:24:09+02:00</lastmod>
+    <lastmod>2026-04-14T02:30:35+01:00</lastmod>
   </url><url>
     <loc>/blog/airflow-1.10.8-1.10.9/</loc>
-    <lastmod>2026-04-14T02:24:09+02:00</lastmod>
+    <lastmod>2026-04-14T02:30:35+01:00</lastmod>
   </url><url>
     <loc>/blog/tags/documentation/</loc>
-    <lastmod>2026-04-14T02:24:09+02:00</lastmod>
+    <lastmod>2026-04-14T02:30:35+01:00</lastmod>
   </url><url>
     <loc>/blog/experience-in-google-season-of-docs-2019-with-apache-airflow/</loc>
-    <lastmod>2026-04-14T02:24:09+02:00</lastmod>
+    <lastmod>2026-04-14T02:30:35+01:00</lastmod>
   </url><url>
     <loc>/blog/airflow-survey/</loc>
-    <lastmod>2026-04-14T02:24:09+02:00</lastmod>
+    <lastmod>2026-04-14T02:30:35+01:00</lastmod>
   </url><url>
     <loc>/blog/announcing-new-website/</loc>
-    <lastmod>2026-04-14T02:24:09+02:00</lastmod>
+    <lastmod>2026-04-14T02:30:35+01:00</lastmod>
   </url><url>
     <loc>/blog/apache-con-europe-2019-thoughts-and-insights-by-airflow-committers/</loc>
-    <lastmod>2026-04-14T02:24:09+02:00</lastmod>
+    <lastmod>2026-04-14T02:30:35+01:00</lastmod>
   </url><url>
     <loc>/blog/tags/development/</loc>
-    <lastmod>2026-04-14T02:24:09+02:00</lastmod>
+    <lastmod>2026-04-14T02:30:35+01:00</lastmod>
   </url><url>
     <loc>/blog/documenting-using-local-development-environments/</loc>
-    <lastmod>2026-04-14T02:24:09+02:00</lastmod>
+    <lastmod>2026-04-14T02:30:35+01:00</lastmod>
   </url><url>
     <loc>/blog/its-a-breeze-to-develop-apache-airflow/</loc>
-    <lastmod>2026-04-14T02:24:09+02:00</lastmod>
+    <lastmod>2026-04-14T02:30:35+01:00</lastmod>
   </url><url>
     <loc>/community/resources/</loc>
-    <lastmod>2026-04-14T02:24:09+02:00</lastmod>
+    <lastmod>2026-04-14T02:30:35+01:00</lastmod>
   </url><url>
     <loc>/survey/</loc>
-    <lastmod>2026-04-14T02:24:09+02:00</lastmod>
+    <lastmod>2026-04-14T02:30:35+01:00</lastmod>
   </url><url>
     <loc>/use-cases/adjoe/</loc>
-    <lastmod>2026-04-14T02:24:09+02:00</lastmod>
+    <lastmod>2026-04-14T02:30:35+01:00</lastmod>
   </url><url>
     <loc>/use-cases/adobe/</loc>
-    <lastmod>2026-04-14T02:24:09+02:00</lastmod>
+    <lastmod>2026-04-14T02:30:35+01:00</lastmod>
   </url><url>
     <loc>/use-cases/adyen/</loc>
-    <lastmod>2026-04-14T02:24:09+02:00</lastmod>
+    <lastmod>2026-04-14T02:30:35+01:00</lastmod>
   </url><url>
     <loc>/use-cases/big-fish-games/</loc>
-    <lastmod>2026-04-14T02:24:09+02:00</lastmod>
+    <lastmod>2026-04-14T02:30:35+01:00</lastmod>
   </url><url>
     <loc>/blocktype/</loc>
-    <lastmod>2026-04-14T02:24:09+02:00</lastmod>
+    <lastmod>2026-04-14T02:30:35+01:00</lastmod>
   </url><url>
     <loc>/blog/</loc>
-    <lastmod>2026-04-14T02:24:09+02:00</lastmod>
+    <lastmod>2026-04-14T02:30:35+01:00</lastmod>
   </url><url>
     <loc>/use-cases/business_operations/</loc>
-    <lastmod>2026-04-14T02:24:09+02:00</lastmod>
+    <lastmod>2026-04-14T02:30:35+01:00</lastmod>
   </url><url>
     <loc>/categories/</loc>
   </url><url>
     <loc>/code-of-conduct/</loc>
-    <lastmod>2026-04-14T02:24:09+02:00</lastmod>
+    <lastmod>2026-04-14T02:30:35+01:00</lastmod>
   </url><url>
     <loc>/community/</loc>
-    <lastmod>2026-04-14T02:24:09+02:00</lastmod>
+    <lastmod>2026-04-14T02:30:35+01:00</lastmod>
   </url><url>
     <loc>/use-cases/dish/</loc>
-    <lastmod>2026-04-14T02:24:09+02:00</lastmod>
+    <lastmod>2026-04-14T02:30:35+01:00</lastmod>
   </url><url>
     <loc>/ecosystem/</loc>
-    <lastmod>2026-04-14T02:24:09+02:00</lastmod>
+    <lastmod>2026-04-14T02:30:35+01:00</lastmod>
   </url><url>
     <loc>/use-cases/etl_analytics/</loc>
-    <lastmod>2026-04-14T02:24:09+02:00</lastmod>
+    <lastmod>2026-04-14T02:30:35+01:00</lastmod>
   </url><url>
     <loc>/use-cases/experity/</loc>
-    <lastmod>2026-04-14T02:24:09+02:00</lastmod>
+    <lastmod>2026-04-14T02:30:35+01:00</lastmod>
   </url><url>
     <loc>/</loc>
-    <lastmod>2026-04-14T02:24:09+02:00</lastmod>
+    <lastmod>2026-04-14T02:30:35+01:00</lastmod>
   </url><url>
     <loc>/use-cases/infrastructure-management/</loc>
-    <lastmod>2026-04-14T02:24:09+02:00</lastmod>
+    <lastmod>2026-04-14T02:30:35+01:00</lastmod>
   </url><url>
     <loc>/meetups/</loc>
-    <lastmod>2026-04-14T02:24:09+02:00</lastmod>
+    <lastmod>2026-04-14T02:30:35+01:00</lastmod>
   </url><url>
     <loc>/use-cases/mlops/</loc>
-    <lastmod>2026-04-14T02:24:09+02:00</lastmod>
+    <lastmod>2026-04-14T02:30:35+01:00</lastmod>
   </url><url>
     <loc>/use-cases/onefootball/</loc>
-    <lastmod>2026-04-14T02:24:09+02:00</lastmod>
+    <lastmod>2026-04-14T02:30:35+01:00</lastmod>
   </url><url>
     <loc>/use-cases/plarium-krasnodar/</loc>
-    <lastmod>2026-04-14T02:24:09+02:00</lastmod>
+    <lastmod>2026-04-14T02:30:35+01:00</lastmod>
   </url><url>
     <loc>/privacy-notice/</loc>
-    <lastmod>2026-04-14T02:24:09+02:00</lastmod>
+    <lastmod>2026-04-14T02:30:35+01:00</lastmod>
   </url><url>
     <loc>/use-cases/suse/</loc>
-    <lastmod>2026-04-14T02:24:09+02:00</lastmod>
+    <lastmod>2026-04-14T02:30:35+01:00</lastmod>
   </url><url>
     <loc>/roadmap/</loc>
-    <lastmod>2026-04-14T02:24:09+02:00</lastmod>
+    <lastmod>2026-04-14T02:30:35+01:00</lastmod>
   </url><url>
     <loc>/search/</loc>
-    <lastmod>2026-04-14T02:24:09+02:00</lastmod>
+    <lastmod>2026-04-14T02:30:35+01:00</lastmod>
   </url><url>
     <loc>/use-cases/seniorlink/</loc>
-    <lastmod>2026-04-14T02:24:09+02:00</lastmod>
+    <lastmod>2026-04-14T02:30:35+01:00</lastmod>
   </url><url>
     <loc>/use-cases/sift/</loc>
-    <lastmod>2026-04-14T02:24:09+02:00</lastmod>
+    <lastmod>2026-04-14T02:30:35+01:00</lastmod>
   </url><url>
     <loc>/use-cases/snapp/</loc>
-    <lastmod>2026-04-14T02:24:09+02:00</lastmod>
+    <lastmod>2026-04-14T02:30:35+01:00</lastmod>
   </url><url>
     <loc>/blocktype/testimonial/</loc>
-    <lastmod>2026-04-14T02:24:09+02:00</lastmod>
+    <lastmod>2026-04-14T02:30:35+01:00</lastmod>
   </url><url>
     <loc>/use-cases/</loc>
-    <lastmod>2026-04-14T02:24:09+02:00</lastmod>
+    <lastmod>2026-04-14T02:30:35+01:00</lastmod>
   </url><url>
     <loc>/blocktype/use-case/</loc>
-    <lastmod>2026-04-14T02:24:09+02:00</lastmod>
+    <lastmod>2026-04-14T02:30:35+01:00</lastmod>
   </url>
 </urlset>
diff --git a/survey/index.html b/survey/index.html
index 04c903af25..03792934a2 100644
--- a/survey/index.html
+++ b/survey/index.html
@@ -34,7 +34,7 @@
 
   <meta itemprop="name" content="Apache Airflow">
   <meta itemprop="description" content="&lt;!DOCTYPE html&gt; Redirecting... If you are not redirected automatically, please click here.">
-  <meta itemprop="dateModified" content="2026-04-14T02:24:09+02:00">
+  <meta itemprop="dateModified" content="2026-04-14T02:30:35+01:00">
   <meta itemprop="wordCount" content="12">
   <meta itemprop="image" content="/images/feature-image.png">
 
diff --git a/tags/index.html b/tags/index.html
index ff7c5fde21..4826599fc1 100644
--- a/tags/index.html
+++ b/tags/index.html
@@ -34,8 +34,8 @@
 
   <meta itemprop="name" content="Tags">
   <meta itemprop="description" content="Platform created by the community to programmatically author, schedule and monitor workflows.">
-  <meta itemprop="datePublished" content="2026-04-07T00:00:00+00:00">
-  <meta itemprop="dateModified" content="2026-04-14T02:24:09+02:00">
+  <meta itemprop="datePublished" content="2026-04-14T00:00:00+00:00">
+  <meta itemprop="dateModified" content="2026-04-14T02:30:35+01:00">
   <meta itemprop="image" content="/images/feature-image.png">
 
 
@@ -500,10 +500,10 @@
     <div class="taxonomy taxonomy-terms-cloud taxo-tags">
       <ul class="taxonomy-terms">
         <li><a class="taxonomy-term" href="/blog/tags/airflow-summit/" data-taxonomy-term="airflow-summit"><span class="taxonomy-label">Airflow Summit</span><span class="taxonomy-count">2</span></a></li>
-        <li><a class="taxonomy-term" href="/blog/tags/community/" data-taxonomy-term="community"><span class="taxonomy-label">Community</span><span class="taxonomy-count">13</span></a></li>
+        <li><a class="taxonomy-term" href="/blog/tags/community/" data-taxonomy-term="community"><span class="taxonomy-label">Community</span><span class="taxonomy-count">14</span></a></li>
         <li><a class="taxonomy-term" href="/blog/tags/development/" data-taxonomy-term="development"><span class="taxonomy-label">Development</span><span class="taxonomy-count">2</span></a></li>
         <li><a class="taxonomy-term" href="/blog/tags/documentation/" data-taxonomy-term="documentation"><span class="taxonomy-label">Documentation</span><span class="taxonomy-count">1</span></a></li>
-        <li><a class="taxonomy-term" href="/blog/tags/release/" data-taxonomy-term="release"><span class="taxonomy-label">Release</span><span class="taxonomy-count">17</span></a></li>
+        <li><a class="taxonomy-term" href="/blog/tags/release/" data-taxonomy-term="release"><span class="taxonomy-label">Release</span><span class="taxonomy-count">18</span></a></li>
         <li><a class="taxonomy-term" href="/blog/tags/rest-api/" data-taxonomy-term="rest-api"><span class="taxonomy-label">REST API</span><span class="taxonomy-count">1</span></a></li>
         <li><a class="taxonomy-term" href="/blog/tags/survey/" data-taxonomy-term="survey"><span class="taxonomy-label">Survey</span><span class="taxonomy-count">6</span></a></li>
         <li><a class="taxonomy-term" href="/blog/tags/users/" data-taxonomy-term="users"><span class="taxonomy-label">Users</span><span class="taxonomy-count">6</span></a></li>
diff --git a/tags/index.xml b/tags/index.xml
index ace30bd736..7e2b7fbabf 100644
--- a/tags/index.xml
+++ b/tags/index.xml
@@ -6,22 +6,22 @@
     <description>Recent content in Tags on Apache Airflow</description>
     <generator>Hugo</generator>
     <language>en</language>
-    <lastBuildDate>Tue, 14 Apr 2026 02:24:09 +0200</lastBuildDate>
+    <lastBuildDate>Tue, 14 Apr 2026 02:30:35 +0100</lastBuildDate>
     <atom:link href="/tags/index.xml" rel="self" type="application/rss+xml" />
-    <item>
-      <title>Release</title>
-      <link>/blog/tags/release/</link>
-      <pubDate>Tue, 07 Apr 2026 00:00:00 +0000</pubDate>
-      <guid>/blog/tags/release/</guid>
-      <description></description>
-    </item>
     <item>
       <title>Community</title>
       <link>/blog/tags/community/</link>
-      <pubDate>Thu, 19 Mar 2026 00:00:00 +0000</pubDate>
+      <pubDate>Tue, 14 Apr 2026 00:00:00 +0000</pubDate>
       <guid>/blog/tags/community/</guid>
       <description></description>
     </item>
+    <item>
+      <title>Release</title>
+      <link>/blog/tags/release/</link>
+      <pubDate>Tue, 14 Apr 2026 00:00:00 +0000</pubDate>
+      <guid>/blog/tags/release/</guid>
+      <description></description>
+    </item>
     <item>
       <title>Survey</title>
       <link>/blog/tags/survey/</link>
diff --git a/use-cases/adjoe/index.html b/use-cases/adjoe/index.html
index e5497a17af..c00b1546f2 100644
--- a/use-cases/adjoe/index.html
+++ b/use-cases/adjoe/index.html
@@ -31,13 +31,13 @@ How did Apache Airflow help to solve this problem? With the creation of a new AW
   <meta property="og:locale" content="en">
   <meta property="og:type" content="article">
     <meta property="article:section" content="use-cases">
-    <meta property="article:modified_time" content="2026-04-14T02:24:09+02:00">
+    <meta property="article:modified_time" content="2026-04-14T02:30:35+01:00">
     <meta property="og:image" content="/images/feature-image.png">
 
   <meta itemprop="name" content="adjoe">
   <meta itemprop="description" content="What was the problem? Before adopting Airflow at adjoe, we handled job scheduling in two main ways: by setting up Kubernetes cronjobs or building AWS Lambda functions. While both approaches had their benefits, they also came with limitations, especially when it came to managing more complex workloads. As our data science teams needs evolved, it became clear that we needed a more robust and flexible orchestration tool.
 How did Apache Airflow help to solve this problem? With the creation of a new AWS environment for the data science teams, we introduced Airflow on Kubernetes as our primary orchestration solution, addressing both stability and scalability requirements.">
-  <meta itemprop="dateModified" content="2026-04-14T02:24:09+02:00">
+  <meta itemprop="dateModified" content="2026-04-14T02:30:35+01:00">
   <meta itemprop="wordCount" content="258">
   <meta itemprop="image" content="/images/feature-image.png">
   <meta itemprop="keywords" content="Testimonial">
diff --git a/use-cases/adobe/index.html b/use-cases/adobe/index.html
index e02403e352..c2867bca75 100644
--- a/use-cases/adobe/index.html
+++ b/use-cases/adobe/index.html
@@ -30,12 +30,12 @@
   <meta property="og:locale" content="en">
   <meta property="og:type" content="article">
     <meta property="article:section" content="use-cases">
-    <meta property="article:modified_time" content="2026-04-14T02:24:09+02:00">
+    <meta property="article:modified_time" content="2026-04-14T02:30:35+01:00">
     <meta property="og:image" content="/images/feature-image.png">
 
   <meta itemprop="name" content="Adobe">
   <meta itemprop="description" content="What was the problem? Modern big data platforms need sophisticated data pipelines connecting to many backend services enabling complex workflows. These workflows need to be deployed, monitored, and run either on regular schedules or triggered by external events. Adobe Experience Platform component services architected and built an orchestration service to enable their users to author, schedule, and monitor complex hierarchical (including sequential [...]
-  <meta itemprop="dateModified" content="2026-04-14T02:24:09+02:00">
+  <meta itemprop="dateModified" content="2026-04-14T02:30:35+01:00">
   <meta itemprop="wordCount" content="251">
   <meta itemprop="image" content="/images/feature-image.png">
   <meta itemprop="keywords" content="Testimonial">
diff --git a/use-cases/adyen/index.html b/use-cases/adyen/index.html
index 23c25a46fe..c37066f105 100644
--- a/use-cases/adyen/index.html
+++ b/use-cases/adyen/index.html
@@ -30,12 +30,12 @@
   <meta property="og:locale" content="en">
   <meta property="og:type" content="article">
     <meta property="article:section" content="use-cases">
-    <meta property="article:modified_time" content="2026-04-14T02:24:09+02:00">
+    <meta property="article:modified_time" content="2026-04-14T02:30:35+01:00">
     <meta property="og:image" content="/images/feature-image.png">
 
   <meta itemprop="name" content="Adyen">
   <meta itemprop="description" content="What was the problem? Many years ago we started out with our own orchestration framework. Due to all the required custom functionality it made sense at the time. However, quickly we realized creating an orchestration tool is not to be underestimated. With the quickly increasing number of users and teams, time spent on fixing issues increased, severely limiting development speed. Furthermore, due to it not being open source, we constantly had to mak [...]
-  <meta itemprop="dateModified" content="2026-04-14T02:24:09+02:00">
+  <meta itemprop="dateModified" content="2026-04-14T02:30:35+01:00">
   <meta itemprop="wordCount" content="405">
   <meta itemprop="image" content="/images/feature-image.png">
   <meta itemprop="keywords" content="Testimonial">
diff --git a/use-cases/big-fish-games/index.html b/use-cases/big-fish-games/index.html
index 7dd9489b9e..e401e59a67 100644
--- a/use-cases/big-fish-games/index.html
+++ b/use-cases/big-fish-games/index.html
@@ -30,12 +30,12 @@
   <meta property="og:locale" content="en">
   <meta property="og:type" content="article">
     <meta property="article:section" content="use-cases">
-    <meta property="article:modified_time" content="2026-04-14T02:24:09+02:00">
+    <meta property="article:modified_time" content="2026-04-14T02:30:35+01:00">
     <meta property="og:image" content="/images/feature-image.png">
 
   <meta itemprop="name" content="Big Fish Games">
   <meta itemprop="description" content="What was the problem? The main challenge is the lack of standardized ETL workflow orchestration tools. PowerShell and Python-based ETL frameworks built in-house are currently used for scheduling and running analytical workloads. However, there is no web UI through which we can monitor these workflows and it requires additional effort to maintain this framework. These scheduled jobs based on external dependencies are not well suited to modern Big Da [...]
-  <meta itemprop="dateModified" content="2026-04-14T02:24:09+02:00">
+  <meta itemprop="dateModified" content="2026-04-14T02:30:35+01:00">
   <meta itemprop="wordCount" content="336">
   <meta itemprop="image" content="/images/feature-image.png">
   <meta itemprop="keywords" content="Testimonial">
diff --git a/use-cases/business_operations/index.html b/use-cases/business_operations/index.html
index f1104681b0..78811d2c53 100644
--- a/use-cases/business_operations/index.html
+++ b/use-cases/business_operations/index.html
@@ -31,13 +31,13 @@ This video shows an example of using Airflow to run the pipelines that power a c
   <meta property="og:locale" content="en">
   <meta property="og:type" content="article">
     <meta property="article:section" content="use-cases">
-    <meta property="article:modified_time" content="2026-04-14T02:24:09+02:00">
+    <meta property="article:modified_time" content="2026-04-14T02:30:35+01:00">
     <meta property="og:image" content="/images/feature-image.png">
 
   <meta itemprop="name" content="Business Operations">
   <meta itemprop="description" content="Use Airflow for Business operations pipelines Airflow can be the starting point for your business idea! For many companies, Airflow delivers the data that powers their core business applications. Whether you need to aggregate user data to power personalized recommendations, display analytics in a user-facing dashboard, or prepare the input data for an LLM, Airflow is the perfect orchestrator.
 This video shows an example of using Airflow to run the pipelines that power a customer-facing analytics dashboard. You can find the code shown in this example here.">
-  <meta itemprop="dateModified" content="2026-04-14T02:24:09+02:00">
+  <meta itemprop="dateModified" content="2026-04-14T02:30:35+01:00">
   <meta itemprop="wordCount" content="425">
   <meta itemprop="image" content="/images/feature-image.png">
   <meta itemprop="keywords" content="Use-Case">
diff --git a/use-cases/dish/index.html b/use-cases/dish/index.html
index 5ce58be18e..9ec663c356 100644
--- a/use-cases/dish/index.html
+++ b/use-cases/dish/index.html
@@ -30,12 +30,12 @@
   <meta property="og:locale" content="en">
   <meta property="og:type" content="article">
     <meta property="article:section" content="use-cases">
-    <meta property="article:modified_time" content="2026-04-14T02:24:09+02:00">
+    <meta property="article:modified_time" content="2026-04-14T02:30:35+01:00">
     <meta property="og:image" content="/images/feature-image.png">
 
   <meta itemprop="name" content="Dish">
   <meta itemprop="description" content="What was the problem? We faced increasing complexity managing lengthy crontabs with scheduling being an issue, this required carefully planning timing due to resource constraints, usage patterns, and especially custom code needed for retry logic. In the last case, having to verify success of previous jobs and/or steps prior to running the next. Furthermore, time to results is important, but we were increasingly relying on buffers for processing, wh [...]
-  <meta itemprop="dateModified" content="2026-04-14T02:24:09+02:00">
+  <meta itemprop="dateModified" content="2026-04-14T02:30:35+01:00">
   <meta itemprop="wordCount" content="248">
   <meta itemprop="image" content="/images/feature-image.png">
   <meta itemprop="keywords" content="Testimonial">
diff --git a/use-cases/etl_analytics/index.html b/use-cases/etl_analytics/index.html
index ba8c21695e..88a75318ad 100644
--- a/use-cases/etl_analytics/index.html
+++ b/use-cases/etl_analytics/index.html
@@ -31,13 +31,13 @@ The video below shows a simple ETL/ELT pipeline in Airflow that extracts climate
   <meta property="og:locale" content="en">
   <meta property="og:type" content="article">
     <meta property="article:section" content="use-cases">
-    <meta property="article:modified_time" content="2026-04-14T02:24:09+02:00">
+    <meta property="article:modified_time" content="2026-04-14T02:30:35+01:00">
     <meta property="og:image" content="/images/feature-image.png">
 
   <meta itemprop="name" content="ETL/ELT">
   <meta itemprop="description" content="Use Airflow for ETL/ELT pipelines Extract-Transform-Load (ETL) and Extract-Load-Transform (ELT) data pipelines are the most common use case for Apache Airflow. 90% of respondents in the 2023 Apache Airflow survey are using Airflow for ETL/ELT to power analytics use cases.
 The video below shows a simple ETL/ELT pipeline in Airflow that extracts climate data from a CSV file, as well as weather data from an API, runs transformations and then loads the results into a database to power a dashboard.">
-  <meta itemprop="dateModified" content="2026-04-14T02:24:09+02:00">
+  <meta itemprop="dateModified" content="2026-04-14T02:30:35+01:00">
   <meta itemprop="wordCount" content="291">
   <meta itemprop="image" content="/images/feature-image.png">
   <meta itemprop="keywords" content="Use-Case">
diff --git a/use-cases/experity/index.html b/use-cases/experity/index.html
index 32d9839988..cfdc583d55 100644
--- a/use-cases/experity/index.html
+++ b/use-cases/experity/index.html
@@ -31,13 +31,13 @@ How did Apache Airflow help to solve this problem? Ultimately we decided flexibl
   <meta property="og:locale" content="en">
   <meta property="og:type" content="article">
     <meta property="article:section" content="use-cases">
-    <meta property="article:modified_time" content="2026-04-14T02:24:09+02:00">
+    <meta property="article:modified_time" content="2026-04-14T02:30:35+01:00">
     <meta property="og:image" content="/images/feature-image.png">
 
   <meta itemprop="name" content="Experity">
   <meta itemprop="description" content="What was the problem? We had to deploy our complex, flagship app to multiple nodes in multiple ways. This required tasks to communicate across Windows nodes and coordinate timing perfectly. We did not want to buy an expensive enterprise scheduling tool and needed ultimate flexibility.
 How did Apache Airflow help to solve this problem? Ultimately we decided flexible, multi-node, DAG capable tooling was key and airflow was one of the few tools that fit that bill. Having it based on open source and python were large factors that upheld our core principles. At the time, Airflow was missing a windows hook and operator so we contributed the WinRM hook and operator back to the community. Given its flexibility we also use DAG generators to have our metadata drive our DAGs and [...]
-  <meta itemprop="dateModified" content="2026-04-14T02:24:09+02:00">
+  <meta itemprop="dateModified" content="2026-04-14T02:30:35+01:00">
   <meta itemprop="wordCount" content="191">
   <meta itemprop="image" content="/images/feature-image.png">
   <meta itemprop="keywords" content="Testimonial">
diff --git a/use-cases/index.html b/use-cases/index.html
index c4a8f41dc9..efd1e95276 100644
--- a/use-cases/index.html
+++ b/use-cases/index.html
@@ -34,7 +34,7 @@
 
   <meta itemprop="name" content="Use Cases">
   <meta itemprop="description" content="Platform created by the community to programmatically author, schedule and monitor workflows.">
-  <meta itemprop="dateModified" content="2026-04-14T02:24:09+02:00">
+  <meta itemprop="dateModified" content="2026-04-14T02:30:35+01:00">
   <meta itemprop="image" content="/images/feature-image.png">
 
 
diff --git a/use-cases/infrastructure-management/index.html b/use-cases/infrastructure-management/index.html
index 144a2ae93c..5f22848031 100644
--- a/use-cases/infrastructure-management/index.html
+++ b/use-cases/infrastructure-management/index.html
@@ -31,13 +31,13 @@ Infrastructure management is often needed within the context of other use cases,
   <meta property="og:locale" content="en">
   <meta property="og:type" content="article">
     <meta property="article:section" content="use-cases">
-    <meta property="article:modified_time" content="2026-04-14T02:24:09+02:00">
+    <meta property="article:modified_time" content="2026-04-14T02:30:35+01:00">
     <meta property="og:image" content="/images/feature-image.png">
 
   <meta itemprop="name" content="Infrastructure Management">
   <meta itemprop="description" content="Use Airflow for Infrastructure Management Airflow can interact with any API, which makes it a great tool to manage your infrastructure, such as Kubernetes or Spark clusters running in any cloud. As of Airflow 2.7, the setup/teardown feature is available, a special type of task with intelligent behavior to spin up and tear down infrastructure at the exact time you need it.
 Infrastructure management is often needed within the context of other use cases, such as MLOps, or implementing data quality checks. This video shows an example of how it might be used for an MLOps pipeline. You can find the code shown in this example here.">
-  <meta itemprop="dateModified" content="2026-04-14T02:24:09+02:00">
+  <meta itemprop="dateModified" content="2026-04-14T02:30:35+01:00">
   <meta itemprop="wordCount" content="310">
   <meta itemprop="image" content="/images/feature-image.png">
   <meta itemprop="keywords" content="Use-Case">
diff --git a/use-cases/mlops/index.html b/use-cases/mlops/index.html
index 96c408e2b1..fd9caf5dbd 100644
--- a/use-cases/mlops/index.html
+++ b/use-cases/mlops/index.html
@@ -30,12 +30,12 @@
   <meta property="og:locale" content="en">
   <meta property="og:type" content="article">
     <meta property="article:section" content="use-cases">
-    <meta property="article:modified_time" content="2026-04-14T02:24:09+02:00">
+    <meta property="article:modified_time" content="2026-04-14T02:30:35+01:00">
     <meta property="og:image" content="/images/feature-image.png">
 
   <meta itemprop="name" content="MLOps">
   <meta itemprop="description" content="Use Airflow for Machine Learning Operations (MLOps) Machine Learning Operations (MLOps) is a broad term encompassing everything needed to run machine learning models in production. MLOps is a rapidly evolving field with many different best practices and behavioral patterns, with Apache Airflow providing tool agnostic orchestration capabilities for all steps. An emerging subset of MLOps is Large Language Model Operations (LLMOps), which focuses on d [...]
-  <meta itemprop="dateModified" content="2026-04-14T02:24:09+02:00">
+  <meta itemprop="dateModified" content="2026-04-14T02:30:35+01:00">
   <meta itemprop="wordCount" content="376">
   <meta itemprop="image" content="/images/feature-image.png">
   <meta itemprop="keywords" content="Use-Case">
diff --git a/use-cases/onefootball/index.html b/use-cases/onefootball/index.html
index 6bae58d4df..f4db576e5c 100644
--- a/use-cases/onefootball/index.html
+++ b/use-cases/onefootball/index.html
@@ -31,13 +31,13 @@ On top of that, new data tools appear each month: third party data sources, clou
   <meta property="og:locale" content="en">
   <meta property="og:type" content="article">
     <meta property="article:section" content="use-cases">
-    <meta property="article:modified_time" content="2026-04-14T02:24:09+02:00">
+    <meta property="article:modified_time" content="2026-04-14T02:30:35+01:00">
     <meta property="og:image" content="/images/feature-image.png">
 
   <meta itemprop="name" content="Onefootball">
   <meta itemprop="description" content="What was the problem? With millions of daily active users, managing the complexity of data engineering at Onefootball is a constant challenge. Lengthy crontabs, multiplication of custom API clients, erosion of confidence in the analytics served, increasing heroism (“only one person can solve this issue”). Those are the challenges that most teams face unless they consciously invest in their tools and processes.
 On top of that, new data tools appear each month: third party data sources, cloud providers solutions, different storage technologies… Managing all those integrations is costly and brittle, especially for small data engineering teams that are trying to do more with less.">
-  <meta itemprop="dateModified" content="2026-04-14T02:24:09+02:00">
+  <meta itemprop="dateModified" content="2026-04-14T02:30:35+01:00">
   <meta itemprop="wordCount" content="294">
   <meta itemprop="image" content="/images/feature-image.png">
   <meta itemprop="keywords" content="Testimonial">
diff --git a/use-cases/plarium-krasnodar/index.html b/use-cases/plarium-krasnodar/index.html
index cde629c6f3..1d103daed4 100644
--- a/use-cases/plarium-krasnodar/index.html
+++ b/use-cases/plarium-krasnodar/index.html
@@ -30,12 +30,12 @@
   <meta property="og:locale" content="en">
   <meta property="og:type" content="article">
     <meta property="article:section" content="use-cases">
-    <meta property="article:modified_time" content="2026-04-14T02:24:09+02:00">
+    <meta property="article:modified_time" content="2026-04-14T02:30:35+01:00">
     <meta property="og:image" content="/images/feature-image.png">
 
   <meta itemprop="name" content="Plarium Krasnodar">
   <meta itemprop="description" content="What was the problem? Our Research &amp; Development department carries out various experiments, and in all of them, we need to create workflow orchestrations for solving tasks in game dev. Previously, we didn’t have any suitable tools with a sufficient number of built-in functions, and we had to orchestrate processes manually and entirely from scratch every time. This led to difficulties with dependencies and monitoring when building complex workf [...]
-  <meta itemprop="dateModified" content="2026-04-14T02:24:09+02:00">
+  <meta itemprop="dateModified" content="2026-04-14T02:30:35+01:00">
   <meta itemprop="wordCount" content="257">
   <meta itemprop="image" content="/images/feature-image.png">
   <meta itemprop="keywords" content="Testimonial">
diff --git a/use-cases/seniorlink/index.html b/use-cases/seniorlink/index.html
index e6422fbd7d..4f80f3ba19 100644
--- a/use-cases/seniorlink/index.html
+++ b/use-cases/seniorlink/index.html
@@ -31,13 +31,13 @@ We had built a robust stack of batch processes to deliver value to the business,
   <meta property="og:locale" content="en">
   <meta property="og:type" content="article">
     <meta property="article:section" content="use-cases">
-    <meta property="article:modified_time" content="2026-04-14T02:24:09+02:00">
+    <meta property="article:modified_time" content="2026-04-14T02:30:35+01:00">
     <meta property="og:image" content="/images/feature-image.png">
 
   <meta itemprop="name" content="Seniorlink">
   <meta itemprop="description" content="What was the problem? Here at Seniorlink, we provide services, support, and technology that engages family caregivers. One of our focuses is using data to bolster our knowledge and improve the experience of our users. Like many looking to build an effective data stack, we adopted a Python, Spark, Redshift, and Tableau core toolset.
 We had built a robust stack of batch processes to deliver value to the business, deploying these data services in AWS using a mixture of EMR, ECS, Lambda, and EC2. Moving fast, as many new endeavors do, we ultimately ended up with one monolithic batch process with many smaller satellite jobs. Given the scale and quantity of jobs, we began to lose transparency as to what was happening. Additionally, many jobs were launched in a single EMR cluster and so tightly coupled that a failure in o [...]
-  <meta itemprop="dateModified" content="2026-04-14T02:24:09+02:00">
+  <meta itemprop="dateModified" content="2026-04-14T02:30:35+01:00">
   <meta itemprop="wordCount" content="400">
   <meta itemprop="image" content="/images/feature-image.png">
   <meta itemprop="keywords" content="Testimonial">
diff --git a/use-cases/sift/index.html b/use-cases/sift/index.html
index 855e8d0537..e020a380d0 100644
--- a/use-cases/sift/index.html
+++ b/use-cases/sift/index.html
@@ -30,12 +30,12 @@
   <meta property="og:locale" content="en">
   <meta property="og:type" content="article">
     <meta property="article:section" content="use-cases">
-    <meta property="article:modified_time" content="2026-04-14T02:24:09+02:00">
+    <meta property="article:modified_time" content="2026-04-14T02:30:35+01:00">
     <meta property="og:image" content="/images/feature-image.png">
 
   <meta itemprop="name" content="Sift">
   <meta itemprop="description" content="What was the problem? At Sift, we’re constantly training machine learning models that feed into the core of Sift’s Digital Trust &amp; Safety platform. The platform gives our customers a way to discern suspicious online behavior from trustworthy behavior, allowing our customers to protect their online transactions, maintain the integrity of their content platforms, and keep their users’ accounts secure. To make this possible, we’ve built model trai [...]
-  <meta itemprop="dateModified" content="2026-04-14T02:24:09+02:00">
+  <meta itemprop="dateModified" content="2026-04-14T02:30:35+01:00">
   <meta itemprop="wordCount" content="641">
   <meta itemprop="image" content="/images/feature-image.png">
   <meta itemprop="keywords" content="Testimonial">
diff --git a/use-cases/snapp/index.html b/use-cases/snapp/index.html
index 178fa7e7f8..3cb2757679 100644
--- a/use-cases/snapp/index.html
+++ b/use-cases/snapp/index.html
@@ -30,12 +30,12 @@
   <meta property="og:locale" content="en">
   <meta property="og:type" content="article">
     <meta property="article:section" content="use-cases">
-    <meta property="article:modified_time" content="2026-04-14T02:24:09+02:00">
+    <meta property="article:modified_time" content="2026-04-14T02:30:35+01:00">
     <meta property="og:image" content="/images/feature-image.png">
 
   <meta itemprop="name" content="Snapp">
   <meta itemprop="description" content="What was the problem? As the Map team at Snapp, one of the largest and fastest-growing internet companies in the Middle East, we have experienced significant growth over the past couple of years, expanding from a team of 7 to a team of 60. However, with this growth came the realization that some of our crucial tasks were being performed manually. This manual approach consumed valuable time and hindered our ability to execute these tasks efficiently.">
-  <meta itemprop="dateModified" content="2026-04-14T02:24:09+02:00">
+  <meta itemprop="dateModified" content="2026-04-14T02:30:35+01:00">
   <meta itemprop="wordCount" content="641">
   <meta itemprop="image" content="/images/feature-image.png">
   <meta itemprop="keywords" content="Testimonial">
diff --git a/use-cases/suse/index.html b/use-cases/suse/index.html
index 11581a7f12..7a70162f98 100644
--- a/use-cases/suse/index.html
+++ b/use-cases/suse/index.html
@@ -31,13 +31,13 @@ The construction of these containers requires the installation of several librar
   <meta property="og:locale" content="en">
   <meta property="og:type" content="article">
     <meta property="article:section" content="use-cases">
-    <meta property="article:modified_time" content="2026-04-14T02:24:09+02:00">
+    <meta property="article:modified_time" content="2026-04-14T02:30:35+01:00">
     <meta property="og:image" content="/images/feature-image.png">
 
   <meta itemprop="name" content="RancherBySUSE">
   <meta itemprop="description" content="What was the problem? Our aim was to build, package, test and distribute curated and trusted containers at scale in an automated way. Those containers can be of any nature, meaning that we need a solution that allows us to build any kind of software with any kind of building tools like Maven, Rust, Java, Ant, or Go.
 The construction of these containers requires the installation of several libraries (which may even conflict) and the orchestration of complex workflows with several integrations, executed either on a scheduled basis or triggered by events from external systems.">
-  <meta itemprop="dateModified" content="2026-04-14T02:24:09+02:00">
+  <meta itemprop="dateModified" content="2026-04-14T02:30:35+01:00">
   <meta itemprop="wordCount" content="361">
   <meta itemprop="image" content="/images/feature-image.png">
   <meta itemprop="keywords" content="Testimonial">