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

pankaj pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/airflow.git


The following commit(s) were added to refs/heads/main by this push:
     new cca4aa4e9a Add OpenAI Provider (#35023)
cca4aa4e9a is described below

commit cca4aa4e9ab545c8aab01b05941a372044668a67
Author: Utkarsh Sharma <[email protected]>
AuthorDate: Tue Nov 7 20:28:14 2023 +0530

    Add OpenAI Provider (#35023)
    
    * Add OpenAI Provider
    
    * Apply suggestions from code review
    
    Co-authored-by: Phani Kumar <[email protected]>
    
    * Remove create_completions method from hook
    
    * Change type of input_text param
    
    Since the upstream API accepts str ot list of tokens, we accept the similar 
inputs from user.
    
    * Updated min-airflow version to 2.5.0
    
    * Updated the interface and fix docs and static files
    
    * Fix tests
    
    * Fix tests
    
    * Change the version
    
    Because of OpenAI SDK not being production ready
    
    * Add embedding_kwargs as a param to operator
    
    * Update tests/providers/openai/hooks/test_openai.py
    
    Co-authored-by: Pankaj Singh <[email protected]>
    
    * Remove unwanted params in docstring
    
    * Update Changelog
    
    * Add security.rst file
    
    * Update docs/apache-airflow-providers-openai/index.rst
    
    Co-authored-by: Pankaj Singh <[email protected]>
    
    * Add host field for connections
    
    * Update docs/apache-airflow-providers-openai/index.rst
    
    Co-authored-by: Pankaj Singh <[email protected]>
    
    * Add changelog.rst file to docs
    
    * Change version to 1.0.0
    
    * Resolve conflicts
    
    * Fix tests
    
    * Fixed tests
    
    * Fix test
    
    * Resolve Conflict
    
    ---------
    
    Co-authored-by: Pankaj Koti <[email protected]>
    Co-authored-by: Phani Kumar <[email protected]>
    Co-authored-by: Pankaj Singh <[email protected]>
---
 .../airflow_providers_bug_report.yml               |   1 +
 CONTRIBUTING.rst                                   |  10 +-
 INSTALL                                            |  10 +-
 airflow/providers/openai/CHANGELOG.rst             |  26 +++++
 airflow/providers/openai/__init__.py               |  16 +++
 airflow/providers/openai/hooks/__init__.py         |  16 +++
 airflow/providers/openai/hooks/openai.py           |  86 ++++++++++++++++
 airflow/providers/openai/operators/__init__.py     |  16 +++
 airflow/providers/openai/operators/openai.py       |  71 +++++++++++++
 airflow/providers/openai/provider.yaml             |  54 ++++++++++
 docs/apache-airflow-providers-openai/changelog.rst |  18 ++++
 docs/apache-airflow-providers-openai/commits.rst   |  19 ++++
 .../connections.rst                                |  37 +++++++
 docs/apache-airflow-providers-openai/index.rst     |  97 ++++++++++++++++++
 .../installing-providers-from-sources.rst          |  18 ++++
 .../operators/openai.rst                           |  38 +++++++
 docs/apache-airflow-providers-openai/security.rst  |  38 +++++++
 docs/apache-airflow/extra-packages-ref.rst         |   2 +
 docs/spelling_wordlist.txt                         |   1 +
 generated/provider_dependencies.json               |   8 ++
 images/breeze/output-commands-hash.txt             |  18 ++--
 images/breeze/output_build-docs.svg                |   8 +-
 ...tput_release-management_add-back-references.svg |   8 +-
 ...management_generate-issue-content-providers.svg |   6 +-
 ...e-management_prepare-provider-documentation.svg |   6 +-
 ...elease-management_prepare-provider-packages.svg |   6 +-
 .../output_release-management_publish-docs.svg     |   8 +-
 ...output_sbom_generate-providers-requirements.svg |   6 +-
 tests/providers/openai/__init__.py                 |  16 +++
 tests/providers/openai/hooks/__init__.py           |  16 +++
 tests/providers/openai/hooks/test_openai.py        |  63 ++++++++++++
 tests/providers/openai/operators/__init__.py       |  16 +++
 tests/providers/openai/operators/test_openai.py    |  36 +++++++
 tests/system/providers/openai/__init__.py          |  16 +++
 tests/system/providers/openai/example_openai.py    | 110 +++++++++++++++++++++
 35 files changed, 878 insertions(+), 43 deletions(-)

diff --git a/.github/ISSUE_TEMPLATE/airflow_providers_bug_report.yml 
b/.github/ISSUE_TEMPLATE/airflow_providers_bug_report.yml
index 94aa9d4960..f117380e72 100644
--- a/.github/ISSUE_TEMPLATE/airflow_providers_bug_report.yml
+++ b/.github/ISSUE_TEMPLATE/airflow_providers_bug_report.yml
@@ -82,6 +82,7 @@ body:
         - odbc
         - openfaas
         - openlineage
+        - openai
         - opensearch
         - opsgenie
         - oracle
diff --git a/CONTRIBUTING.rst b/CONTRIBUTING.rst
index a93d5308db..1ccc19e874 100644
--- a/CONTRIBUTING.rst
+++ b/CONTRIBUTING.rst
@@ -676,11 +676,11 @@ datadog, dbt.cloud, deprecated_api, devel, devel_all, 
devel_ci, devel_hadoop, di
 doc, doc_gen, docker, druid, elasticsearch, exasol, facebook, ftp, gcp, 
gcp_api, github,
 github_enterprise, google, google_auth, grpc, hashicorp, hdfs, hive, http, 
imap, influxdb, jdbc,
 jenkins, kerberos, kubernetes, ldap, leveldb, microsoft.azure, 
microsoft.mssql, microsoft.psrp,
-microsoft.winrm, mongo, mssql, mysql, neo4j, odbc, openfaas, openlineage, 
opensearch, opsgenie,
-oracle, otel, pagerduty, pandas, papermill, password, pgvector, pinecone, 
pinot, plexus, postgres,
-presto, rabbitmq, redis, s3, s3fs, salesforce, samba, segment, sendgrid, 
sentry, sftp, singularity,
-slack, smtp, snowflake, spark, sqlite, ssh, statsd, tableau, tabular, 
telegram, trino, vertica,
-virtualenv, weaviate, webhdfs, winrm, yandex, zendesk
+microsoft.winrm, mongo, mssql, mysql, neo4j, odbc, openai, openfaas, 
openlineage, opensearch,
+opsgenie, oracle, otel, pagerduty, pandas, papermill, password, pgvector, 
pinecone, pinot, plexus,
+postgres, presto, rabbitmq, redis, s3, s3fs, salesforce, samba, segment, 
sendgrid, sentry, sftp,
+singularity, slack, smtp, snowflake, spark, sqlite, ssh, statsd, tableau, 
tabular, telegram, trino,
+vertica, virtualenv, weaviate, webhdfs, winrm, yandex, zendesk
   .. END EXTRAS HERE
 
 Provider packages
diff --git a/INSTALL b/INSTALL
index 9def10e09f..7742c006bc 100644
--- a/INSTALL
+++ b/INSTALL
@@ -103,11 +103,11 @@ datadog, dbt.cloud, deprecated_api, devel, devel_all, 
devel_ci, devel_hadoop, di
 doc, doc_gen, docker, druid, elasticsearch, exasol, facebook, ftp, gcp, 
gcp_api, github,
 github_enterprise, google, google_auth, grpc, hashicorp, hdfs, hive, http, 
imap, influxdb, jdbc,
 jenkins, kerberos, kubernetes, ldap, leveldb, microsoft.azure, 
microsoft.mssql, microsoft.psrp,
-microsoft.winrm, mongo, mssql, mysql, neo4j, odbc, openfaas, openlineage, 
opensearch, opsgenie,
-oracle, otel, pagerduty, pandas, papermill, password, pgvector, pinecone, 
pinot, plexus, postgres,
-presto, rabbitmq, redis, s3, s3fs, salesforce, samba, segment, sendgrid, 
sentry, sftp, singularity,
-slack, smtp, snowflake, spark, sqlite, ssh, statsd, tableau, tabular, 
telegram, trino, vertica,
-virtualenv, weaviate, webhdfs, winrm, yandex, zendesk
+microsoft.winrm, mongo, mssql, mysql, neo4j, odbc, openai, openfaas, 
openlineage, opensearch,
+opsgenie, oracle, otel, pagerduty, pandas, papermill, password, pgvector, 
pinecone, pinot, plexus,
+postgres, presto, rabbitmq, redis, s3, s3fs, salesforce, samba, segment, 
sendgrid, sentry, sftp,
+singularity, slack, smtp, snowflake, spark, sqlite, ssh, statsd, tableau, 
tabular, telegram, trino,
+vertica, virtualenv, weaviate, webhdfs, winrm, yandex, zendesk
 # END EXTRAS HERE
 
 # For installing Airflow in development environments - see CONTRIBUTING.rst
diff --git a/airflow/providers/openai/CHANGELOG.rst 
b/airflow/providers/openai/CHANGELOG.rst
new file mode 100644
index 0000000000..3a10e06641
--- /dev/null
+++ b/airflow/providers/openai/CHANGELOG.rst
@@ -0,0 +1,26 @@
+ .. Licensed to the Apache Software Foundation (ASF) under one
+    or more contributor license agreements.  See the NOTICE file
+    distributed with this work for additional information
+    regarding copyright ownership.  The ASF licenses this file
+    to you under the Apache License, Version 2.0 (the
+    "License"); you may not use this file except in compliance
+    with the License.  You may obtain a copy of the License at
+
+ ..   http://www.apache.org/licenses/LICENSE-2.0
+
+ .. Unless required by applicable law or agreed to in writing,
+    software distributed under the License is distributed on an
+    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+    KIND, either express or implied.  See the License for the
+    specific language governing permissions and limitations
+    under the License.
+
+``apache-airflow-providers-openai``
+
+Changelog
+---------
+
+1.0.0
+.....
+
+Initial version of the provider.
diff --git a/airflow/providers/openai/__init__.py 
b/airflow/providers/openai/__init__.py
new file mode 100644
index 0000000000..13a83393a9
--- /dev/null
+++ b/airflow/providers/openai/__init__.py
@@ -0,0 +1,16 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
diff --git a/airflow/providers/openai/hooks/__init__.py 
b/airflow/providers/openai/hooks/__init__.py
new file mode 100644
index 0000000000..13a83393a9
--- /dev/null
+++ b/airflow/providers/openai/hooks/__init__.py
@@ -0,0 +1,16 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
diff --git a/airflow/providers/openai/hooks/openai.py 
b/airflow/providers/openai/hooks/openai.py
new file mode 100644
index 0000000000..ee21b5a3c3
--- /dev/null
+++ b/airflow/providers/openai/hooks/openai.py
@@ -0,0 +1,86 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+from __future__ import annotations
+
+from typing import Any
+
+import openai
+
+from airflow.hooks.base import BaseHook
+
+
+class OpenAIHook(BaseHook):
+    """
+    Use OpenAI SDK to interact with OpenAI APIs.
+
+    .. seealso:: https://platform.openai.com/docs/introduction/overview
+
+    :param conn_id: :ref:`OpenAI connection id <howto/connection:openai>`
+    """
+
+    conn_name_attr = "conn_id"
+    default_conn_name = "openai_default"
+    conn_type = "openai"
+    hook_name = "OpenAI"
+
+    def __init__(self, conn_id: str = default_conn_name, *args: Any, **kwargs: 
Any) -> None:
+        super().__init__(*args, **kwargs)
+        self.conn_id = conn_id
+        openai.api_key = self._get_api_key()
+        api_base = self._get_api_base()
+        if api_base:
+            openai.api_base = api_base
+
+    @staticmethod
+    def get_ui_field_behaviour() -> dict[str, Any]:
+        """Return custom field behaviour."""
+        return {
+            "hidden_fields": ["schema", "port", "login", "extra"],
+            "relabeling": {"password": "API Key"},
+            "placeholders": {},
+        }
+
+    def test_connection(self) -> tuple[bool, str]:
+        try:
+            openai.Model.list()
+            return True, "Connection established!"
+        except Exception as e:
+            return False, str(e)
+
+    def _get_api_key(self) -> str:
+        """Get the OpenAI API key from the connection."""
+        conn = self.get_connection(self.conn_id)
+        if not conn.password:
+            raise ValueError("OpenAI API key not found in connection")
+        return str(conn.password)
+
+    def _get_api_base(self) -> None | str:
+        conn = self.get_connection(self.conn_id)
+        return conn.host
+
+    def create_embeddings(
+        self, text: str | list[Any], model: str = "text-embedding-ada-002", 
**kwargs: Any
+    ) -> list[float]:
+        """Generate embeddings for the given text using the given model.
+
+        :param text: The text to generate embeddings for.
+        :param model: The model to use for generating embeddings.
+        """
+        response = openai.Embedding.create(model=model, input=text, **kwargs)
+        embeddings: list[float] = response["data"][0]["embedding"]
+        return embeddings
diff --git a/airflow/providers/openai/operators/__init__.py 
b/airflow/providers/openai/operators/__init__.py
new file mode 100644
index 0000000000..13a83393a9
--- /dev/null
+++ b/airflow/providers/openai/operators/__init__.py
@@ -0,0 +1,16 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
diff --git a/airflow/providers/openai/operators/openai.py 
b/airflow/providers/openai/operators/openai.py
new file mode 100644
index 0000000000..1e585b5d0a
--- /dev/null
+++ b/airflow/providers/openai/operators/openai.py
@@ -0,0 +1,71 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+from __future__ import annotations
+
+from functools import cached_property
+from typing import TYPE_CHECKING, Any, Sequence
+
+from airflow.models import BaseOperator
+from airflow.providers.openai.hooks.openai import OpenAIHook
+
+if TYPE_CHECKING:
+    from airflow.utils.context import Context
+
+
+class OpenAIEmbeddingOperator(BaseOperator):
+    """
+    Operator that accepts input text to generate OpenAI embeddings using the 
specified model.
+
+    .. seealso::
+        For more information on how to use this operator, take a look at the 
guide:
+        :ref:`howto/operator:OpenAIEmbeddingOperator`
+
+    :param conn_id: The OpenAI connection.
+    :param input_text: The text to generate OpenAI embeddings on. Either 
input_text or input_callable
+        should be provided.
+    :param model: The OpenAI model to be used for generating the embeddings.
+    :param embedding_kwargs: For possible option check
+        .. seealso:: 
https://platform.openai.com/docs/api-reference/embeddings/create
+    """
+
+    template_fields: Sequence[str] = ("input_text",)
+
+    def __init__(
+        self,
+        conn_id: str,
+        input_text: str | list[Any],
+        model: str = "text-embedding-ada-002",
+        embedding_kwargs: dict | None = None,
+        **kwargs: Any,
+    ):
+        self.embedding_kwargs = embedding_kwargs or {}
+        super().__init__(**kwargs)
+        self.conn_id = conn_id
+        self.input_text = input_text
+        self.model = model
+
+    @cached_property
+    def hook(self) -> OpenAIHook:
+        """Return an instance of the OpenAIHook."""
+        return OpenAIHook(conn_id=self.conn_id)
+
+    def execute(self, context: Context) -> list[float]:
+        self.log.info("Input text: %s", self.input_text)
+        embeddings = self.hook.create_embeddings(self.input_text, 
model=self.model, **self.embedding_kwargs)
+        self.log.info("Embeddings: %s", embeddings)
+        return embeddings
diff --git a/airflow/providers/openai/provider.yaml 
b/airflow/providers/openai/provider.yaml
new file mode 100644
index 0000000000..ffb07de7bb
--- /dev/null
+++ b/airflow/providers/openai/provider.yaml
@@ -0,0 +1,54 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+---
+package-name: apache-airflow-providers-openai
+
+name: OpenAI
+
+description: |
+    `OpenAI <https://platform.openai.com/docs/introduction>`__
+
+suspended: false
+
+versions:
+  - 1.0.0
+
+integrations:
+  - integration-name: OpenAI
+    external-doc-url: https://platform.openai.com/docs/introduction
+    how-to-guide:
+      - /docs/apache-airflow-providers-openai/operators/openai.rst
+    tags: [software]
+
+dependencies:
+  - apache-airflow>=2.5.0
+  - openai[datalib]>=0.28.1,<1.0
+
+hooks:
+  - integration-name: OpenAI
+    python-modules:
+      - airflow.providers.openai.hooks.openai
+
+operators:
+  - integration-name: OpenAI
+    python-modules:
+      - airflow.providers.openai.operators.openai
+
+connection-types:
+  - hook-class-name: airflow.providers.openai.hooks.openai.OpenAIHook
+    connection-type: openai
diff --git a/docs/apache-airflow-providers-openai/changelog.rst 
b/docs/apache-airflow-providers-openai/changelog.rst
new file mode 100644
index 0000000000..6dac5e89f6
--- /dev/null
+++ b/docs/apache-airflow-providers-openai/changelog.rst
@@ -0,0 +1,18 @@
+ .. Licensed to the Apache Software Foundation (ASF) under one
+    or more contributor license agreements.  See the NOTICE file
+    distributed with this work for additional information
+    regarding copyright ownership.  The ASF licenses this file
+    to you under the Apache License, Version 2.0 (the
+    "License"); you may not use this file except in compliance
+    with the License.  You may obtain a copy of the License at
+
+ ..   http://www.apache.org/licenses/LICENSE-2.0
+
+ .. Unless required by applicable law or agreed to in writing,
+    software distributed under the License is distributed on an
+    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+    KIND, either express or implied.  See the License for the
+    specific language governing permissions and limitations
+    under the License.
+
+.. include:: ../../airflow/providers/odbc/CHANGELOG.rst
diff --git a/docs/apache-airflow-providers-openai/commits.rst 
b/docs/apache-airflow-providers-openai/commits.rst
new file mode 100644
index 0000000000..65a96ff284
--- /dev/null
+++ b/docs/apache-airflow-providers-openai/commits.rst
@@ -0,0 +1,19 @@
+ .. Licensed to the Apache Software Foundation (ASF) under one
+    or more contributor license agreements.  See the NOTICE file
+    distributed with this work for additional information
+    regarding copyright ownership.  The ASF licenses this file
+    to you under the Apache License, Version 2.0 (the
+    "License"); you may not use this file except in compliance
+    with the License.  You may obtain a copy of the License at
+
+ ..   http://www.apache.org/licenses/LICENSE-2.0
+
+ .. Unless required by applicable law or agreed to in writing,
+    software distributed under the License is distributed on an
+    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+    KIND, either express or implied.  See the License for the
+    specific language governing permissions and limitations
+    under the License.
+
+Package apache-airflow-providers-openai
+----------------------------------------
diff --git a/docs/apache-airflow-providers-openai/connections.rst 
b/docs/apache-airflow-providers-openai/connections.rst
new file mode 100644
index 0000000000..88e79df59d
--- /dev/null
+++ b/docs/apache-airflow-providers-openai/connections.rst
@@ -0,0 +1,37 @@
+ .. Licensed to the Apache Software Foundation (ASF) under one
+    or more contributor license agreements.  See the NOTICE file
+    distributed with this work for additional information
+    regarding copyright ownership.  The ASF licenses this file
+    to you under the Apache License, Version 2.0 (the
+    "License"); you may not use this file except in compliance
+    with the License.  You may obtain a copy of the License at
+
+ ..   http://www.apache.org/licenses/LICENSE-2.0
+
+ .. Unless required by applicable law or agreed to in writing,
+    software distributed under the License is distributed on an
+    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+    KIND, either express or implied.  See the License for the
+    specific language governing permissions and limitations
+    under the License.
+
+.. _howto/connection:openai:
+
+OpenAI Connection
+=================
+
+The `OpenAI <https://openai.com/>`__ connection type enables access to OpenAI 
APIs.
+
+Default Connection IDs
+----------------------
+
+OpenAI hook points to ``openai_default`` connection by default.
+
+Configuring the Connection
+--------------------------
+
+API Key (required)
+    Specify your OpenAI API Key to connect.
+
+Host (optional)
+    The host address of the OpenAI instance.
diff --git a/docs/apache-airflow-providers-openai/index.rst 
b/docs/apache-airflow-providers-openai/index.rst
new file mode 100644
index 0000000000..deb07c0626
--- /dev/null
+++ b/docs/apache-airflow-providers-openai/index.rst
@@ -0,0 +1,97 @@
+
+.. Licensed to the Apache Software Foundation (ASF) under one
+    or more contributor license agreements.  See the NOTICE file
+    distributed with this work for additional information
+    regarding copyright ownership.  The ASF licenses this file
+    to you under the Apache License, Version 2.0 (the
+    "License"); you may not use this file except in compliance
+    with the License.  You may obtain a copy of the License at
+
+ ..   http://www.apache.org/licenses/LICENSE-2.0
+
+ .. Unless required by applicable law or agreed to in writing,
+    software distributed under the License is distributed on an
+    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+    KIND, either express or implied.  See the License for the
+    specific language governing permissions and limitations
+    under the License.
+
+``apache-airflow-providers-openai``
+======================================
+
+
+.. toctree::
+    :hidden:
+    :maxdepth: 1
+    :caption: Basics
+
+    Home <self>
+    Changelog <changelog>
+    Security <security>
+
+.. toctree::
+    :hidden:
+    :maxdepth: 1
+    :caption: Guides
+
+    Connection types <connections>
+    Operators <operators/openai>
+
+
+.. toctree::
+    :hidden:
+    :maxdepth: 1
+    :caption: Resources
+
+    Python API <_api/airflow/providers/openai/index>
+    PyPI Repository <https://pypi.org/project/apache-airflow-providers-openai/>
+    Installing from sources <installing-providers-from-sources>
+
+.. toctree::
+    :hidden:
+    :maxdepth: 1
+    :caption: System tests
+
+    System Tests <_api/tests/system/providers/openai/index>
+
+Package apache-airflow-providers-openai
+-----------------------------------------
+
+`Open AI <https://platform.openai.com/docs/api-reference/>`__
+
+
+Release: 1.0.0
+
+Provider package
+----------------
+
+This is a provider package for ``Open AI`` APIs. All classes for this provider 
package
+are in ``airflow.providers.openai`` python module.
+
+Installation
+------------
+
+You can install this package on top of an existing Airflow 2 installation (see 
``Requirements`` below)
+for the minimum Airflow version supported) via
+``pip install apache-airflow-providers-openai``
+
+
+Requirements
+------------
+
+The minimum Apache Airflow version supported by this provider package is 
``2.5.0``.
+
+===================  ==================
+PIP package          Version required
+===================  ==================
+``apache-airflow``    ``>=2.5.0``
+``openai[datalib]``  ``>=0.28.1,<1.0``
+===================  ==================
+
+.. THE REMAINDER OF THE FILE IS AUTOMATICALLY GENERATED. IT WILL BE 
OVERWRITTEN AT RELEASE TIME!
+.. toctree::
+    :hidden:
+    :maxdepth: 1
+    :caption: Commits
+
+    Detailed list of commits <commits>
diff --git 
a/docs/apache-airflow-providers-openai/installing-providers-from-sources.rst 
b/docs/apache-airflow-providers-openai/installing-providers-from-sources.rst
new file mode 100644
index 0000000000..b4e730f4ff
--- /dev/null
+++ b/docs/apache-airflow-providers-openai/installing-providers-from-sources.rst
@@ -0,0 +1,18 @@
+ .. Licensed to the Apache Software Foundation (ASF) under one
+    or more contributor license agreements.  See the NOTICE file
+    distributed with this work for additional information
+    regarding copyright ownership.  The ASF licenses this file
+    to you under the Apache License, Version 2.0 (the
+    "License"); you may not use this file except in compliance
+    with the License.  You may obtain a copy of the License at
+
+ ..   http://www.apache.org/licenses/LICENSE-2.0
+
+ .. Unless required by applicable law or agreed to in writing,
+    software distributed under the License is distributed on an
+    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+    KIND, either express or implied.  See the License for the
+    specific language governing permissions and limitations
+    under the License.
+
+.. include:: ../exts/includes/installing-providers-from-sources.rst
diff --git a/docs/apache-airflow-providers-openai/operators/openai.rst 
b/docs/apache-airflow-providers-openai/operators/openai.rst
new file mode 100644
index 0000000000..e3f4f4d403
--- /dev/null
+++ b/docs/apache-airflow-providers-openai/operators/openai.rst
@@ -0,0 +1,38 @@
+ .. Licensed to the Apache Software Foundation (ASF) under one
+    or more contributor license agreements.  See the NOTICE file
+    distributed with this work for additional information
+    regarding copyright ownership.  The ASF licenses this file
+    to you under the Apache License, Version 2.0 (the
+    "License"); you may not use this file except in compliance
+    with the License.  You may obtain a copy of the License at
+
+ ..   http://www.apache.org/licenses/LICENSE-2.0
+
+ .. Unless required by applicable law or agreed to in writing,
+    software distributed under the License is distributed on an
+    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+    KIND, either express or implied.  See the License for the
+    specific language governing permissions and limitations
+    under the License.
+
+.. _howto/operator:OpenAIEmbeddingOperator:
+
+OpenAIEmbeddingOperator
+========================
+
+Use the 
:class:`~airflow.providers.open_ai.operators.open_ai.OpenAIEmbeddingOperator` to
+interact with Open APIs to create embeddings for given text.
+
+
+Using the Operator
+^^^^^^^^^^^^^^^^^^
+
+The OpenAIEmbeddingOperator requires the ``input_text`` as an input to 
embedding API. Use the ``conn_id`` parameter to specify the OpenAI connection 
to use to
+connect to your account.
+
+An example using the operator is in way:
+
+.. exampleinclude:: /../../tests/system/providers/openai/example_openai.py
+    :language: python
+    :start-after: [START howto_operator_openai_embedding]
+    :end-before: [END howto_operator_openai_embedding]
diff --git a/docs/apache-airflow-providers-openai/security.rst 
b/docs/apache-airflow-providers-openai/security.rst
new file mode 100644
index 0000000000..66c6f79a4e
--- /dev/null
+++ b/docs/apache-airflow-providers-openai/security.rst
@@ -0,0 +1,38 @@
+
+ .. Licensed to the Apache Software Foundation (ASF) under one
+    or more contributor license agreements.  See the NOTICE file
+    distributed with this work for additional information
+    regarding copyright ownership.  The ASF licenses this file
+    to you under the Apache License, Version 2.0 (the
+    "License"); you may not use this file except in compliance
+    with the License.  You may obtain a copy of the License at
+
+ ..   http://www.apache.org/licenses/LICENSE-2.0
+
+ .. Unless required by applicable law or agreed to in writing,
+    software distributed under the License is distributed on an
+    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+    KIND, either express or implied.  See the License for the
+    specific language governing permissions and limitations
+    under the License.
+
+Releasing security patches
+--------------------------
+
+Airflow providers are released independently from Airflow itself and the 
information about vulnerabilities
+is published separately. You can upgrade providers independently from Airflow 
itself, following the
+instructions found in :doc:`apache-airflow:installation/installing-from-pypi`.
+
+When we release Provider version, the development is always done from the 
``main`` branch where we prepare
+the next version. The provider uses strict `SemVer <https://semver.org>`_ 
versioning policy. Depending on
+the scope of the change, Provider will get ''MAJOR'' version upgrade when 
there are
+breaking changes, ``MINOR`` version upgrade when there are new features or 
``PATCHLEVEL`` version upgrade
+when there are only bug fixes (including security bugfixes) - and this is the 
only version that receives
+security fixes by default, so you should upgrade to latest version of the 
provider if you want to receive
+all released security fixes.
+
+The only exception to that rule is when we have a critical security fix and 
good reason to provide an
+out-of-band release for the provider, in which case stakeholders in the 
provider might decide to cherry-pick
+and prepare a branch for an older version of the provider following the
+`mixed governance model 
<https://github.com/apache/airflow/blob/main/PROVIDERS.rst#mixed-governance-model>`_
+and requires interested parties to cherry-pick and test the fixes.
diff --git a/docs/apache-airflow/extra-packages-ref.rst 
b/docs/apache-airflow/extra-packages-ref.rst
index 39e72df00d..050781dc92 100644
--- a/docs/apache-airflow/extra-packages-ref.rst
+++ b/docs/apache-airflow/extra-packages-ref.rst
@@ -192,6 +192,8 @@ These are extras that add dependencies needed for 
integration with external serv
 
+---------------------+-----------------------------------------------------+-----------------------------------------------------+
 | hashicorp           | ``pip install 'apache-airflow[hashicorp]'``         | 
Hashicorp Services (Vault)                          |
 
+---------------------+-----------------------------------------------------+-----------------------------------------------------+
+| openai              | ``pip install 'apache-airflow[openai]'``            | 
Open AI hooks and operators                         |
++---------------------+-----------------------------------------------------+-----------------------------------------------------+
 | opsgenie            | ``pip install 'apache-airflow[opsgenie]'``          | 
OpsGenie hooks and operators                        |
 
+---------------------+-----------------------------------------------------+-----------------------------------------------------+
 | pagerduty           | ``pip install 'apache-airflow[pagerduty]'``         | 
Pagerduty hook                                      |
diff --git a/docs/spelling_wordlist.txt b/docs/spelling_wordlist.txt
index 85af5b4d32..04efc4813b 100644
--- a/docs/spelling_wordlist.txt
+++ b/docs/spelling_wordlist.txt
@@ -1073,6 +1073,7 @@ onboarded
 OnFailure
 onkill
 Oozie
+openai
 openapi
 openfaas
 openlineage
diff --git a/generated/provider_dependencies.json 
b/generated/provider_dependencies.json
index c26ad94147..67eb9f95a2 100644
--- a/generated/provider_dependencies.json
+++ b/generated/provider_dependencies.json
@@ -666,6 +666,14 @@
     ],
     "excluded-python-versions": []
   },
+  "openai": {
+    "deps": [
+      "apache-airflow>=2.5.0",
+      "openai[datalib]>=0.28.1,<1.0"
+    ],
+    "cross-providers-deps": [],
+    "excluded-python-versions": []
+  },
   "openfaas": {
     "deps": [
       "apache-airflow>=2.5.0"
diff --git a/images/breeze/output-commands-hash.txt 
b/images/breeze/output-commands-hash.txt
index 72774a5f59..c287c24c4b 100644
--- a/images/breeze/output-commands-hash.txt
+++ b/images/breeze/output-commands-hash.txt
@@ -2,7 +2,7 @@
 # Please do not solve it but run `breeze setup regenerate-command-images`.
 # This command should fix the conflict and regenerate help images that you 
have conflict with.
 main:96b4884054753db922cb8ca2cc555368
-build-docs:a041793f07803437dd897c45b1efdbbd
+build-docs:2ff0e1725d71f0b16244507483a43d52
 ci:find-backtracking-candidates:17fe56b867a745e5032a08dfcd3f73ee
 ci:fix-ownership:3e5a73533cc96045e72cb258783cfc96
 ci:free-space:49af17b032039c05c41a7a8283f365cc
@@ -36,26 +36,26 @@ prod-image:build:1628f7bff3e7e369f0358a646682e674
 prod-image:pull:3817ef211b023b76df84ee1110ef64dd
 prod-image:verify:bd2b78738a7c388dbad6076c41a9f906
 prod-image:6011405076eb0e1049d87e971e3adce1
-release-management:add-back-references:b5c5b691d919decea4f14525e7b7c13b
+release-management:add-back-references:824cb5a426c88b262c357d8b20b06bb9
 release-management:create-minor-branch:a3834afc4aa5d1e98002c9e9e7a9931d
 release-management:generate-constraints:01aef235b11e59ed7f10c970a5cdaba7
-release-management:generate-issue-content-providers:9f2fe4418c50253d4280408168a393ee
+release-management:generate-issue-content-providers:54d7c46992d256b87227cea87ef73ab0
 release-management:generate-providers-metadata:d4e8e5cfaa024e3963af02d7a873048d
 release-management:install-provider-packages:34c38aca17d23dbb454fe7a6bfd8e630
 release-management:prepare-airflow-package:85d01c57e5b5ee0fb9e5f9d9706ed3b5
-release-management:prepare-provider-documentation:b829c39027e2868dba2381c5eabee3aa
-release-management:prepare-provider-packages:8293366ce313008003b44887551156aa
-release-management:publish-docs:21ac1b87f871312a432b63b8fd847d94
+release-management:prepare-provider-documentation:519f830d76013ca5313e72eecea24421
+release-management:prepare-provider-packages:d3fb4f06f7b67f9824abdebc52ef561b
+release-management:publish-docs:be9b9b57777c23a8bb5fe59860c8d18c
 release-management:release-prod-images:cfbfe8b19fee91fd90718f98ef2fd078
 release-management:start-rc-process:b27bd524dd3c89f50a747b60a7e892c1
 release-management:start-release:419f48f6a4ff4457cb9de7ff496aebbe
 release-management:update-constraints:02ec4b119150e3fdbac52026e94820ef
 release-management:verify-provider-packages:96dce5644aad6b37080acf77b3d8de3a
-release-management:dcc55e19d3cf3065be31a45a8400849e
+release-management:1b0ee6fcf999ed59408e1a294889eb86
 sbom:build-all-airflow-images:32f8acade299c2b112e986bae99846db
-sbom:generate-providers-requirements:bfafb5707aec6abc3b5528dd1a04d35b
+sbom:generate-providers-requirements:344968a060e00ace19738cca47d70641
 sbom:update-sbom-information:653be48be70b4b7ff5172d491aadc694
-sbom:79bb821663107dd83dcab6b672dd896f
+sbom:5592e8be9f804dc136f1930ec4ee67c2
 setup:autocomplete:fffcd49e102e09ccd69b3841a9e3ea8e
 setup:check-all-params-in-groups:5c5e3c382fc8ce84899d224448b3f48a
 setup:config:3435f1f1535a82c30591dbf577294d2e
diff --git a/images/breeze/output_build-docs.svg 
b/images/breeze/output_build-docs.svg
index 7b7ca19fc9..5c0842af27 100644
--- a/images/breeze/output_build-docs.svg
+++ b/images/breeze/output_build-docs.svg
@@ -166,10 +166,10 @@
 </text><text class="breeze-build-docs-r4" x="12.2" y="166.4" textLength="85.4" 
clip-path="url(#breeze-build-docs-line-6)">apprise</text><text 
class="breeze-build-docs-r1" x="97.6" y="166.4" textLength="36.6" 
clip-path="url(#breeze-build-docs-line-6)">&#160;|&#160;</text><text 
class="breeze-build-docs-r4" x="134.2" y="166.4" textLength="97.6" 
clip-path="url(#breeze-build-docs-line-6)">arangodb</text><text 
class="breeze-build-docs-r1" x="231.8" y="166.4" textLength="36.6" 
clip-path="url(#b [...]
 </text><text class="breeze-build-docs-r4" x="12.2" y="190.8" 
textLength="146.4" 
clip-path="url(#breeze-build-docs-line-7)">daskexecutor</text><text 
class="breeze-build-docs-r1" x="158.6" y="190.8" textLength="36.6" 
clip-path="url(#breeze-build-docs-line-7)">&#160;|&#160;</text><text 
class="breeze-build-docs-r4" x="195.2" y="190.8" textLength="122" 
clip-path="url(#breeze-build-docs-line-7)">databricks</text><text 
class="breeze-build-docs-r1" x="317.2" y="190.8" textLength="36.6" clip-path 
[...]
 </text><text class="breeze-build-docs-r4" x="12.2" y="215.2" textLength="36.6" 
clip-path="url(#breeze-build-docs-line-8)">ftp</text><text 
class="breeze-build-docs-r1" x="48.8" y="215.2" textLength="36.6" 
clip-path="url(#breeze-build-docs-line-8)">&#160;|&#160;</text><text 
class="breeze-build-docs-r4" x="85.4" y="215.2" textLength="73.2" 
clip-path="url(#breeze-build-docs-line-8)">github</text><text 
class="breeze-build-docs-r1" x="158.6" y="215.2" textLength="36.6" 
clip-path="url(#breeze-b [...]
-</text><text class="breeze-build-docs-r1" x="12.2" y="239.6" textLength="24.4" 
clip-path="url(#breeze-build-docs-line-9)">|&#160;</text><text 
class="breeze-build-docs-r4" x="36.6" y="239.6" textLength="109.8" 
clip-path="url(#breeze-build-docs-line-9)">microsoft</text><text 
class="breeze-build-docs-r1" x="146.4" y="239.6" textLength="12.2" 
clip-path="url(#breeze-build-docs-line-9)">.</text><text 
class="breeze-build-docs-r4" x="158.6" y="239.6" textLength="48.8" 
clip-path="url(#breeze-buil [...]
-</text><text class="breeze-build-docs-r4" x="12.2" y="264" textLength="73.2" 
clip-path="url(#breeze-build-docs-line-10)">oracle</text><text 
class="breeze-build-docs-r1" x="85.4" y="264" textLength="36.6" 
clip-path="url(#breeze-build-docs-line-10)">&#160;|&#160;</text><text 
class="breeze-build-docs-r4" x="122" y="264" textLength="109.8" 
clip-path="url(#breeze-build-docs-line-10)">pagerduty</text><text 
class="breeze-build-docs-r1" x="231.8" y="264" textLength="36.6" 
clip-path="url(#breeze- [...]
-</text><text class="breeze-build-docs-r4" x="12.2" y="288.4" textLength="85.4" 
clip-path="url(#breeze-build-docs-line-11)">segment</text><text 
class="breeze-build-docs-r1" x="97.6" y="288.4" textLength="36.6" 
clip-path="url(#breeze-build-docs-line-11)">&#160;|&#160;</text><text 
class="breeze-build-docs-r4" x="134.2" y="288.4" textLength="97.6" 
clip-path="url(#breeze-build-docs-line-11)">sendgrid</text><text 
class="breeze-build-docs-r1" x="231.8" y="288.4" textLength="36.6" 
clip-path="url [...]
-</text><text class="breeze-build-docs-r4" x="12.2" y="312.8" textLength="61" 
clip-path="url(#breeze-build-docs-line-12)">trino</text><text 
class="breeze-build-docs-r1" x="73.2" y="312.8" textLength="36.6" 
clip-path="url(#breeze-build-docs-line-12)">&#160;|&#160;</text><text 
class="breeze-build-docs-r4" x="109.8" y="312.8" textLength="85.4" 
clip-path="url(#breeze-build-docs-line-12)">vertica</text><text 
class="breeze-build-docs-r1" x="195.2" y="312.8" textLength="36.6" 
clip-path="url(#bre [...]
+</text><text class="breeze-build-docs-r1" x="12.2" y="239.6" textLength="24.4" 
clip-path="url(#breeze-build-docs-line-9)">|&#160;</text><text 
class="breeze-build-docs-r4" x="36.6" y="239.6" textLength="109.8" 
clip-path="url(#breeze-build-docs-line-9)">microsoft</text><text 
class="breeze-build-docs-r1" x="146.4" y="239.6" textLength="12.2" 
clip-path="url(#breeze-build-docs-line-9)">.</text><text 
class="breeze-build-docs-r4" x="158.6" y="239.6" textLength="48.8" 
clip-path="url(#breeze-buil [...]
+</text><text class="breeze-build-docs-r4" x="12.2" y="264" textLength="97.6" 
clip-path="url(#breeze-build-docs-line-10)">opsgenie</text><text 
class="breeze-build-docs-r1" x="109.8" y="264" textLength="36.6" 
clip-path="url(#breeze-build-docs-line-10)">&#160;|&#160;</text><text 
class="breeze-build-docs-r4" x="146.4" y="264" textLength="73.2" 
clip-path="url(#breeze-build-docs-line-10)">oracle</text><text 
class="breeze-build-docs-r1" x="219.6" y="264" textLength="36.6" 
clip-path="url(#breeze [...]
+</text><text class="breeze-build-docs-r4" x="12.2" y="288.4" textLength="61" 
clip-path="url(#breeze-build-docs-line-11)">samba</text><text 
class="breeze-build-docs-r1" x="73.2" y="288.4" textLength="36.6" 
clip-path="url(#breeze-build-docs-line-11)">&#160;|&#160;</text><text 
class="breeze-build-docs-r4" x="109.8" y="288.4" textLength="85.4" 
clip-path="url(#breeze-build-docs-line-11)">segment</text><text 
class="breeze-build-docs-r1" x="195.2" y="288.4" textLength="36.6" 
clip-path="url(#bre [...]
+</text><text class="breeze-build-docs-r4" x="12.2" y="312.8" textLength="97.6" 
clip-path="url(#breeze-build-docs-line-12)">telegram</text><text 
class="breeze-build-docs-r1" x="109.8" y="312.8" textLength="36.6" 
clip-path="url(#breeze-build-docs-line-12)">&#160;|&#160;</text><text 
class="breeze-build-docs-r4" x="146.4" y="312.8" textLength="61" 
clip-path="url(#breeze-build-docs-line-12)">trino</text><text 
class="breeze-build-docs-r1" x="207.4" y="312.8" textLength="36.6" 
clip-path="url(#b [...]
 </text><text class="breeze-build-docs-r1" x="1464" y="337.2" textLength="12.2" 
clip-path="url(#breeze-build-docs-line-13)">
 </text><text class="breeze-build-docs-r1" x="12.2" y="361.6" 
textLength="195.2" 
clip-path="url(#breeze-build-docs-line-14)">Build&#160;documents.</text><text 
class="breeze-build-docs-r1" x="1464" y="361.6" textLength="12.2" 
clip-path="url(#breeze-build-docs-line-14)">
 </text><text class="breeze-build-docs-r1" x="1464" y="386" textLength="12.2" 
clip-path="url(#breeze-build-docs-line-15)">
diff --git a/images/breeze/output_release-management_add-back-references.svg 
b/images/breeze/output_release-management_add-back-references.svg
index b7ad090ef3..fd81dfd784 100644
--- a/images/breeze/output_release-management_add-back-references.svg
+++ b/images/breeze/output_release-management_add-back-references.svg
@@ -137,10 +137,10 @@
 </text><text class="breeze-release-management-add-back-references-r4" x="12.2" 
y="166.4" textLength="97.6" 
clip-path="url(#breeze-release-management-add-back-references-line-6)">arangodb</text><text
 class="breeze-release-management-add-back-references-r1" x="109.8" y="166.4" 
textLength="36.6" 
clip-path="url(#breeze-release-management-add-back-references-line-6)">&#160;|&#160;</text><text
 class="breeze-release-management-add-back-references-r4" x="146.4" y="166.4" 
textLength="61" clip-pat [...]
 </text><text class="breeze-release-management-add-back-references-r4" x="12.2" 
y="190.8" textLength="146.4" 
clip-path="url(#breeze-release-management-add-back-references-line-7)">daskexecutor</text><text
 class="breeze-release-management-add-back-references-r1" x="158.6" y="190.8" 
textLength="36.6" 
clip-path="url(#breeze-release-management-add-back-references-line-7)">&#160;|&#160;</text><text
 class="breeze-release-management-add-back-references-r4" x="195.2" y="190.8" 
textLength="122" cl [...]
 </text><text class="breeze-release-management-add-back-references-r4" x="12.2" 
y="215.2" textLength="36.6" 
clip-path="url(#breeze-release-management-add-back-references-line-8)">ftp</text><text
 class="breeze-release-management-add-back-references-r1" x="48.8" y="215.2" 
textLength="36.6" 
clip-path="url(#breeze-release-management-add-back-references-line-8)">&#160;|&#160;</text><text
 class="breeze-release-management-add-back-references-r4" x="85.4" y="215.2" 
textLength="73.2" clip-path="ur [...]
-</text><text class="breeze-release-management-add-back-references-r1" x="12.2" 
y="239.6" textLength="24.4" 
clip-path="url(#breeze-release-management-add-back-references-line-9)">|&#160;</text><text
 class="breeze-release-management-add-back-references-r4" x="36.6" y="239.6" 
textLength="109.8" 
clip-path="url(#breeze-release-management-add-back-references-line-9)">microsoft</text><text
 class="breeze-release-management-add-back-references-r1" x="146.4" y="239.6" 
textLength="12.2" clip-path=" [...]
-</text><text class="breeze-release-management-add-back-references-r4" x="12.2" 
y="264" textLength="73.2" 
clip-path="url(#breeze-release-management-add-back-references-line-10)">oracle</text><text
 class="breeze-release-management-add-back-references-r1" x="85.4" y="264" 
textLength="36.6" 
clip-path="url(#breeze-release-management-add-back-references-line-10)">&#160;|&#160;</text><text
 class="breeze-release-management-add-back-references-r4" x="122" y="264" 
textLength="109.8" clip-path="url [...]
-</text><text class="breeze-release-management-add-back-references-r4" x="12.2" 
y="288.4" textLength="85.4" 
clip-path="url(#breeze-release-management-add-back-references-line-11)">segment</text><text
 class="breeze-release-management-add-back-references-r1" x="97.6" y="288.4" 
textLength="36.6" 
clip-path="url(#breeze-release-management-add-back-references-line-11)">&#160;|&#160;</text><text
 class="breeze-release-management-add-back-references-r4" x="134.2" y="288.4" 
textLength="97.6" clip-p [...]
-</text><text class="breeze-release-management-add-back-references-r4" x="12.2" 
y="312.8" textLength="61" 
clip-path="url(#breeze-release-management-add-back-references-line-12)">trino</text><text
 class="breeze-release-management-add-back-references-r1" x="73.2" y="312.8" 
textLength="36.6" 
clip-path="url(#breeze-release-management-add-back-references-line-12)">&#160;|&#160;</text><text
 class="breeze-release-management-add-back-references-r4" x="109.8" y="312.8" 
textLength="85.4" clip-path= [...]
+</text><text class="breeze-release-management-add-back-references-r1" x="12.2" 
y="239.6" textLength="24.4" 
clip-path="url(#breeze-release-management-add-back-references-line-9)">|&#160;</text><text
 class="breeze-release-management-add-back-references-r4" x="36.6" y="239.6" 
textLength="109.8" 
clip-path="url(#breeze-release-management-add-back-references-line-9)">microsoft</text><text
 class="breeze-release-management-add-back-references-r1" x="146.4" y="239.6" 
textLength="12.2" clip-path=" [...]
+</text><text class="breeze-release-management-add-back-references-r4" x="12.2" 
y="264" textLength="97.6" 
clip-path="url(#breeze-release-management-add-back-references-line-10)">opsgenie</text><text
 class="breeze-release-management-add-back-references-r1" x="109.8" y="264" 
textLength="36.6" 
clip-path="url(#breeze-release-management-add-back-references-line-10)">&#160;|&#160;</text><text
 class="breeze-release-management-add-back-references-r4" x="146.4" y="264" 
textLength="73.2" clip-path= [...]
+</text><text class="breeze-release-management-add-back-references-r4" x="12.2" 
y="288.4" textLength="61" 
clip-path="url(#breeze-release-management-add-back-references-line-11)">samba</text><text
 class="breeze-release-management-add-back-references-r1" x="73.2" y="288.4" 
textLength="36.6" 
clip-path="url(#breeze-release-management-add-back-references-line-11)">&#160;|&#160;</text><text
 class="breeze-release-management-add-back-references-r4" x="109.8" y="288.4" 
textLength="85.4" clip-path= [...]
+</text><text class="breeze-release-management-add-back-references-r4" x="12.2" 
y="312.8" textLength="97.6" 
clip-path="url(#breeze-release-management-add-back-references-line-12)">telegram</text><text
 class="breeze-release-management-add-back-references-r1" x="109.8" y="312.8" 
textLength="36.6" 
clip-path="url(#breeze-release-management-add-back-references-line-12)">&#160;|&#160;</text><text
 class="breeze-release-management-add-back-references-r4" x="146.4" y="312.8" 
textLength="61" clip-p [...]
 </text><text class="breeze-release-management-add-back-references-r1" x="1464" 
y="337.2" textLength="12.2" 
clip-path="url(#breeze-release-management-add-back-references-line-13)">
 </text><text class="breeze-release-management-add-back-references-r1" x="12.2" 
y="361.6" textLength="976" 
clip-path="url(#breeze-release-management-add-back-references-line-14)">Command&#160;to&#160;add&#160;back&#160;references&#160;for&#160;documentation&#160;to&#160;make&#160;it&#160;backward&#160;compatible.</text><text
 class="breeze-release-management-add-back-references-r1" x="1464" y="361.6" 
textLength="12.2" 
clip-path="url(#breeze-release-management-add-back-references-line-14)">
 </text><text class="breeze-release-management-add-back-references-r1" x="1464" 
y="386" textLength="12.2" 
clip-path="url(#breeze-release-management-add-back-references-line-15)">
diff --git 
a/images/breeze/output_release-management_generate-issue-content-providers.svg 
b/images/breeze/output_release-management_generate-issue-content-providers.svg
index 5236c2c877..00bae5b47b 100644
--- 
a/images/breeze/output_release-management_generate-issue-content-providers.svg
+++ 
b/images/breeze/output_release-management_generate-issue-content-providers.svg
@@ -150,9 +150,9 @@
 </text><text 
class="breeze-release-management-generate-issue-content-providers-r4" x="12.2" 
y="166.4" textLength="73.2" 
clip-path="url(#breeze-release-management-generate-issue-content-providers-line-6)">celery</text><text
 class="breeze-release-management-generate-issue-content-providers-r1" x="85.4" 
y="166.4" textLength="36.6" 
clip-path="url(#breeze-release-management-generate-issue-content-providers-line-6)">&#160;|&#160;</text><text
 class="breeze-release-management-generate-issue-cont [...]
 </text><text 
class="breeze-release-management-generate-issue-content-providers-r4" x="12.2" 
y="190.8" textLength="36.6" 
clip-path="url(#breeze-release-management-generate-issue-content-providers-line-7)">dbt</text><text
 class="breeze-release-management-generate-issue-content-providers-r1" x="48.8" 
y="190.8" textLength="12.2" 
clip-path="url(#breeze-release-management-generate-issue-content-providers-line-7)">.</text><text
 class="breeze-release-management-generate-issue-content-providers-r [...]
 </text><text 
class="breeze-release-management-generate-issue-content-providers-r1" x="12.2" 
y="215.2" textLength="24.4" 
clip-path="url(#breeze-release-management-generate-issue-content-providers-line-8)">|&#160;</text><text
 class="breeze-release-management-generate-issue-content-providers-r4" x="36.6" 
y="215.2" textLength="48.8" 
clip-path="url(#breeze-release-management-generate-issue-content-providers-line-8)">http</text><text
 class="breeze-release-management-generate-issue-content-prov [...]
-</text><text 
class="breeze-release-management-generate-issue-content-providers-r4" x="12.2" 
y="239.6" textLength="61" 
clip-path="url(#breeze-release-management-generate-issue-content-providers-line-9)">mongo</text><text
 class="breeze-release-management-generate-issue-content-providers-r1" x="73.2" 
y="239.6" textLength="36.6" 
clip-path="url(#breeze-release-management-generate-issue-content-providers-line-9)">&#160;|&#160;</text><text
 class="breeze-release-management-generate-issue-content [...]
-</text><text 
class="breeze-release-management-generate-issue-content-providers-r4" x="12.2" 
y="264" textLength="97.6" 
clip-path="url(#breeze-release-management-generate-issue-content-providers-line-10)">pgvector</text><text
 class="breeze-release-management-generate-issue-content-providers-r1" 
x="109.8" y="264" textLength="36.6" 
clip-path="url(#breeze-release-management-generate-issue-content-providers-line-10)">&#160;|&#160;</text><text
 class="breeze-release-management-generate-issue-con [...]
-</text><text 
class="breeze-release-management-generate-issue-content-providers-r4" x="12.2" 
y="288.4" textLength="134.2" 
clip-path="url(#breeze-release-management-generate-issue-content-providers-line-11)">singularity</text><text
 class="breeze-release-management-generate-issue-content-providers-r1" 
x="146.4" y="288.4" textLength="36.6" 
clip-path="url(#breeze-release-management-generate-issue-content-providers-line-11)">&#160;|&#160;</text><text
 class="breeze-release-management-generate-i [...]
+</text><text 
class="breeze-release-management-generate-issue-content-providers-r4" x="12.2" 
y="239.6" textLength="61" 
clip-path="url(#breeze-release-management-generate-issue-content-providers-line-9)">mongo</text><text
 class="breeze-release-management-generate-issue-content-providers-r1" x="73.2" 
y="239.6" textLength="36.6" 
clip-path="url(#breeze-release-management-generate-issue-content-providers-line-9)">&#160;|&#160;</text><text
 class="breeze-release-management-generate-issue-content [...]
+</text><text 
class="breeze-release-management-generate-issue-content-providers-r4" x="12.2" 
y="264" textLength="109.8" 
clip-path="url(#breeze-release-management-generate-issue-content-providers-line-10)">papermill</text><text
 class="breeze-release-management-generate-issue-content-providers-r1" x="122" 
y="264" textLength="36.6" 
clip-path="url(#breeze-release-management-generate-issue-content-providers-line-10)">&#160;|&#160;</text><text
 class="breeze-release-management-generate-issue-con [...]
+</text><text 
class="breeze-release-management-generate-issue-content-providers-r1" x="12.2" 
y="288.4" textLength="24.4" 
clip-path="url(#breeze-release-management-generate-issue-content-providers-line-11)">|&#160;</text><text
 class="breeze-release-management-generate-issue-content-providers-r4" x="36.6" 
y="288.4" textLength="134.2" 
clip-path="url(#breeze-release-management-generate-issue-content-providers-line-11)">singularity</text><text
 class="breeze-release-management-generate-issue-co [...]
 </text><text 
class="breeze-release-management-generate-issue-content-providers-r4" x="12.2" 
y="312.8" textLength="73.2" 
clip-path="url(#breeze-release-management-generate-issue-content-providers-line-12)">yandex</text><text
 class="breeze-release-management-generate-issue-content-providers-r1" x="85.4" 
y="312.8" textLength="36.6" 
clip-path="url(#breeze-release-management-generate-issue-content-providers-line-12)">&#160;|&#160;</text><text
 class="breeze-release-management-generate-issue-co [...]
 </text><text 
class="breeze-release-management-generate-issue-content-providers-r1" x="1464" 
y="337.2" textLength="12.2" 
clip-path="url(#breeze-release-management-generate-issue-content-providers-line-13)">
 </text><text 
class="breeze-release-management-generate-issue-content-providers-r1" x="12.2" 
y="361.6" textLength="585.6" 
clip-path="url(#breeze-release-management-generate-issue-content-providers-line-14)">Generates&#160;content&#160;for&#160;issue&#160;to&#160;test&#160;the&#160;release.</text><text
 class="breeze-release-management-generate-issue-content-providers-r1" x="1464" 
y="361.6" textLength="12.2" 
clip-path="url(#breeze-release-management-generate-issue-content-providers-line-14)">
diff --git 
a/images/breeze/output_release-management_prepare-provider-documentation.svg 
b/images/breeze/output_release-management_prepare-provider-documentation.svg
index f53d968460..15dbe6fcb5 100644
--- a/images/breeze/output_release-management_prepare-provider-documentation.svg
+++ b/images/breeze/output_release-management_prepare-provider-documentation.svg
@@ -162,9 +162,9 @@
 </text><text 
class="breeze-release-management-prepare-provider-documentation-r4" x="12.2" 
y="166.4" textLength="73.2" 
clip-path="url(#breeze-release-management-prepare-provider-documentation-line-6)">celery</text><text
 class="breeze-release-management-prepare-provider-documentation-r1" x="85.4" 
y="166.4" textLength="36.6" 
clip-path="url(#breeze-release-management-prepare-provider-documentation-line-6)">&#160;|&#160;</text><text
 class="breeze-release-management-prepare-provider-documentat [...]
 </text><text 
class="breeze-release-management-prepare-provider-documentation-r4" x="12.2" 
y="190.8" textLength="36.6" 
clip-path="url(#breeze-release-management-prepare-provider-documentation-line-7)">dbt</text><text
 class="breeze-release-management-prepare-provider-documentation-r1" x="48.8" 
y="190.8" textLength="12.2" 
clip-path="url(#breeze-release-management-prepare-provider-documentation-line-7)">.</text><text
 class="breeze-release-management-prepare-provider-documentation-r4" x="61"  
[...]
 </text><text 
class="breeze-release-management-prepare-provider-documentation-r1" x="12.2" 
y="215.2" textLength="24.4" 
clip-path="url(#breeze-release-management-prepare-provider-documentation-line-8)">|&#160;</text><text
 class="breeze-release-management-prepare-provider-documentation-r4" x="36.6" 
y="215.2" textLength="48.8" 
clip-path="url(#breeze-release-management-prepare-provider-documentation-line-8)">http</text><text
 class="breeze-release-management-prepare-provider-documentation-r1"  [...]
-</text><text 
class="breeze-release-management-prepare-provider-documentation-r4" x="12.2" 
y="239.6" textLength="61" 
clip-path="url(#breeze-release-management-prepare-provider-documentation-line-9)">mongo</text><text
 class="breeze-release-management-prepare-provider-documentation-r1" x="73.2" 
y="239.6" textLength="36.6" 
clip-path="url(#breeze-release-management-prepare-provider-documentation-line-9)">&#160;|&#160;</text><text
 class="breeze-release-management-prepare-provider-documentation [...]
-</text><text 
class="breeze-release-management-prepare-provider-documentation-r4" x="12.2" 
y="264" textLength="97.6" 
clip-path="url(#breeze-release-management-prepare-provider-documentation-line-10)">pgvector</text><text
 class="breeze-release-management-prepare-provider-documentation-r1" x="109.8" 
y="264" textLength="36.6" 
clip-path="url(#breeze-release-management-prepare-provider-documentation-line-10)">&#160;|&#160;</text><text
 class="breeze-release-management-prepare-provider-documenta [...]
-</text><text 
class="breeze-release-management-prepare-provider-documentation-r4" x="12.2" 
y="288.4" textLength="134.2" 
clip-path="url(#breeze-release-management-prepare-provider-documentation-line-11)">singularity</text><text
 class="breeze-release-management-prepare-provider-documentation-r1" x="146.4" 
y="288.4" textLength="36.6" 
clip-path="url(#breeze-release-management-prepare-provider-documentation-line-11)">&#160;|&#160;</text><text
 class="breeze-release-management-prepare-provider-d [...]
+</text><text 
class="breeze-release-management-prepare-provider-documentation-r4" x="12.2" 
y="239.6" textLength="61" 
clip-path="url(#breeze-release-management-prepare-provider-documentation-line-9)">mongo</text><text
 class="breeze-release-management-prepare-provider-documentation-r1" x="73.2" 
y="239.6" textLength="36.6" 
clip-path="url(#breeze-release-management-prepare-provider-documentation-line-9)">&#160;|&#160;</text><text
 class="breeze-release-management-prepare-provider-documentation [...]
+</text><text 
class="breeze-release-management-prepare-provider-documentation-r4" x="12.2" 
y="264" textLength="109.8" 
clip-path="url(#breeze-release-management-prepare-provider-documentation-line-10)">papermill</text><text
 class="breeze-release-management-prepare-provider-documentation-r1" x="122" 
y="264" textLength="36.6" 
clip-path="url(#breeze-release-management-prepare-provider-documentation-line-10)">&#160;|&#160;</text><text
 class="breeze-release-management-prepare-provider-documenta [...]
+</text><text 
class="breeze-release-management-prepare-provider-documentation-r1" x="12.2" 
y="288.4" textLength="24.4" 
clip-path="url(#breeze-release-management-prepare-provider-documentation-line-11)">|&#160;</text><text
 class="breeze-release-management-prepare-provider-documentation-r4" x="36.6" 
y="288.4" textLength="134.2" 
clip-path="url(#breeze-release-management-prepare-provider-documentation-line-11)">singularity</text><text
 class="breeze-release-management-prepare-provider-document [...]
 </text><text 
class="breeze-release-management-prepare-provider-documentation-r4" x="12.2" 
y="312.8" textLength="73.2" 
clip-path="url(#breeze-release-management-prepare-provider-documentation-line-12)">yandex</text><text
 class="breeze-release-management-prepare-provider-documentation-r1" x="85.4" 
y="312.8" textLength="36.6" 
clip-path="url(#breeze-release-management-prepare-provider-documentation-line-12)">&#160;|&#160;</text><text
 class="breeze-release-management-prepare-provider-document [...]
 </text><text 
class="breeze-release-management-prepare-provider-documentation-r1" x="1464" 
y="337.2" textLength="12.2" 
clip-path="url(#breeze-release-management-prepare-provider-documentation-line-13)">
 </text><text 
class="breeze-release-management-prepare-provider-documentation-r1" x="12.2" 
y="361.6" textLength="780.8" 
clip-path="url(#breeze-release-management-prepare-provider-documentation-line-14)">Prepare&#160;CHANGELOG,&#160;README&#160;and&#160;COMMITS&#160;information&#160;for&#160;providers.</text><text
 class="breeze-release-management-prepare-provider-documentation-r1" x="1464" 
y="361.6" textLength="12.2" 
clip-path="url(#breeze-release-management-prepare-provider-documentation- [...]
diff --git 
a/images/breeze/output_release-management_prepare-provider-packages.svg 
b/images/breeze/output_release-management_prepare-provider-packages.svg
index bf8ec7be39..31c6aa0c81 100644
--- a/images/breeze/output_release-management_prepare-provider-packages.svg
+++ b/images/breeze/output_release-management_prepare-provider-packages.svg
@@ -147,9 +147,9 @@
 </text><text class="breeze-release-management-prepare-provider-packages-r4" 
x="12.2" y="166.4" textLength="73.2" 
clip-path="url(#breeze-release-management-prepare-provider-packages-line-6)">celery</text><text
 class="breeze-release-management-prepare-provider-packages-r1" x="85.4" 
y="166.4" textLength="36.6" 
clip-path="url(#breeze-release-management-prepare-provider-packages-line-6)">&#160;|&#160;</text><text
 class="breeze-release-management-prepare-provider-packages-r4" x="122" 
y="166.4" [...]
 </text><text class="breeze-release-management-prepare-provider-packages-r4" 
x="12.2" y="190.8" textLength="36.6" 
clip-path="url(#breeze-release-management-prepare-provider-packages-line-7)">dbt</text><text
 class="breeze-release-management-prepare-provider-packages-r1" x="48.8" 
y="190.8" textLength="12.2" 
clip-path="url(#breeze-release-management-prepare-provider-packages-line-7)">.</text><text
 class="breeze-release-management-prepare-provider-packages-r4" x="61" 
y="190.8" textLength="61" [...]
 </text><text class="breeze-release-management-prepare-provider-packages-r1" 
x="12.2" y="215.2" textLength="24.4" 
clip-path="url(#breeze-release-management-prepare-provider-packages-line-8)">|&#160;</text><text
 class="breeze-release-management-prepare-provider-packages-r4" x="36.6" 
y="215.2" textLength="48.8" 
clip-path="url(#breeze-release-management-prepare-provider-packages-line-8)">http</text><text
 class="breeze-release-management-prepare-provider-packages-r1" x="85.4" 
y="215.2" textLe [...]
-</text><text class="breeze-release-management-prepare-provider-packages-r4" 
x="12.2" y="239.6" textLength="61" 
clip-path="url(#breeze-release-management-prepare-provider-packages-line-9)">mongo</text><text
 class="breeze-release-management-prepare-provider-packages-r1" x="73.2" 
y="239.6" textLength="36.6" 
clip-path="url(#breeze-release-management-prepare-provider-packages-line-9)">&#160;|&#160;</text><text
 class="breeze-release-management-prepare-provider-packages-r4" x="109.8" 
y="239.6"  [...]
-</text><text class="breeze-release-management-prepare-provider-packages-r4" 
x="12.2" y="264" textLength="97.6" 
clip-path="url(#breeze-release-management-prepare-provider-packages-line-10)">pgvector</text><text
 class="breeze-release-management-prepare-provider-packages-r1" x="109.8" 
y="264" textLength="36.6" 
clip-path="url(#breeze-release-management-prepare-provider-packages-line-10)">&#160;|&#160;</text><text
 class="breeze-release-management-prepare-provider-packages-r4" x="146.4" 
y="264 [...]
-</text><text class="breeze-release-management-prepare-provider-packages-r4" 
x="12.2" y="288.4" textLength="134.2" 
clip-path="url(#breeze-release-management-prepare-provider-packages-line-11)">singularity</text><text
 class="breeze-release-management-prepare-provider-packages-r1" x="146.4" 
y="288.4" textLength="36.6" 
clip-path="url(#breeze-release-management-prepare-provider-packages-line-11)">&#160;|&#160;</text><text
 class="breeze-release-management-prepare-provider-packages-r4" x="183"  [...]
+</text><text class="breeze-release-management-prepare-provider-packages-r4" 
x="12.2" y="239.6" textLength="61" 
clip-path="url(#breeze-release-management-prepare-provider-packages-line-9)">mongo</text><text
 class="breeze-release-management-prepare-provider-packages-r1" x="73.2" 
y="239.6" textLength="36.6" 
clip-path="url(#breeze-release-management-prepare-provider-packages-line-9)">&#160;|&#160;</text><text
 class="breeze-release-management-prepare-provider-packages-r4" x="109.8" 
y="239.6"  [...]
+</text><text class="breeze-release-management-prepare-provider-packages-r4" 
x="12.2" y="264" textLength="109.8" 
clip-path="url(#breeze-release-management-prepare-provider-packages-line-10)">papermill</text><text
 class="breeze-release-management-prepare-provider-packages-r1" x="122" y="264" 
textLength="36.6" 
clip-path="url(#breeze-release-management-prepare-provider-packages-line-10)">&#160;|&#160;</text><text
 class="breeze-release-management-prepare-provider-packages-r4" x="158.6" 
y="264 [...]
+</text><text class="breeze-release-management-prepare-provider-packages-r1" 
x="12.2" y="288.4" textLength="24.4" 
clip-path="url(#breeze-release-management-prepare-provider-packages-line-11)">|&#160;</text><text
 class="breeze-release-management-prepare-provider-packages-r4" x="36.6" 
y="288.4" textLength="134.2" 
clip-path="url(#breeze-release-management-prepare-provider-packages-line-11)">singularity</text><text
 class="breeze-release-management-prepare-provider-packages-r1" x="170.8" y="28 
[...]
 </text><text class="breeze-release-management-prepare-provider-packages-r4" 
x="12.2" y="312.8" textLength="73.2" 
clip-path="url(#breeze-release-management-prepare-provider-packages-line-12)">yandex</text><text
 class="breeze-release-management-prepare-provider-packages-r1" x="85.4" 
y="312.8" textLength="36.6" 
clip-path="url(#breeze-release-management-prepare-provider-packages-line-12)">&#160;|&#160;</text><text
 class="breeze-release-management-prepare-provider-packages-r4" x="122" y="312. 
[...]
 </text><text class="breeze-release-management-prepare-provider-packages-r1" 
x="1464" y="337.2" textLength="12.2" 
clip-path="url(#breeze-release-management-prepare-provider-packages-line-13)">
 </text><text class="breeze-release-management-prepare-provider-packages-r1" 
x="12.2" y="361.6" textLength="585.6" 
clip-path="url(#breeze-release-management-prepare-provider-packages-line-14)">Prepare&#160;sdist/whl&#160;packages&#160;of&#160;Airflow&#160;Providers.</text><text
 class="breeze-release-management-prepare-provider-packages-r1" x="1464" 
y="361.6" textLength="12.2" 
clip-path="url(#breeze-release-management-prepare-provider-packages-line-14)">
diff --git a/images/breeze/output_release-management_publish-docs.svg 
b/images/breeze/output_release-management_publish-docs.svg
index 99d25657d4..6c95a24c97 100644
--- a/images/breeze/output_release-management_publish-docs.svg
+++ b/images/breeze/output_release-management_publish-docs.svg
@@ -183,10 +183,10 @@
 </text><text class="breeze-release-management-publish-docs-r4" x="12.2" 
y="166.4" textLength="85.4" 
clip-path="url(#breeze-release-management-publish-docs-line-6)">apprise</text><text
 class="breeze-release-management-publish-docs-r1" x="97.6" y="166.4" 
textLength="36.6" 
clip-path="url(#breeze-release-management-publish-docs-line-6)">&#160;|&#160;</text><text
 class="breeze-release-management-publish-docs-r4" x="134.2" y="166.4" 
textLength="97.6" clip-path="url(#breeze-release-management-p [...]
 </text><text class="breeze-release-management-publish-docs-r4" x="12.2" 
y="190.8" textLength="146.4" 
clip-path="url(#breeze-release-management-publish-docs-line-7)">daskexecutor</text><text
 class="breeze-release-management-publish-docs-r1" x="158.6" y="190.8" 
textLength="36.6" 
clip-path="url(#breeze-release-management-publish-docs-line-7)">&#160;|&#160;</text><text
 class="breeze-release-management-publish-docs-r4" x="195.2" y="190.8" 
textLength="122" clip-path="url(#breeze-release-manage [...]
 </text><text class="breeze-release-management-publish-docs-r4" x="12.2" 
y="215.2" textLength="36.6" 
clip-path="url(#breeze-release-management-publish-docs-line-8)">ftp</text><text 
class="breeze-release-management-publish-docs-r1" x="48.8" y="215.2" 
textLength="36.6" 
clip-path="url(#breeze-release-management-publish-docs-line-8)">&#160;|&#160;</text><text
 class="breeze-release-management-publish-docs-r4" x="85.4" y="215.2" 
textLength="73.2" clip-path="url(#breeze-release-management-publis [...]
-</text><text class="breeze-release-management-publish-docs-r1" x="12.2" 
y="239.6" textLength="24.4" 
clip-path="url(#breeze-release-management-publish-docs-line-9)">|&#160;</text><text
 class="breeze-release-management-publish-docs-r4" x="36.6" y="239.6" 
textLength="109.8" 
clip-path="url(#breeze-release-management-publish-docs-line-9)">microsoft</text><text
 class="breeze-release-management-publish-docs-r1" x="146.4" y="239.6" 
textLength="12.2" clip-path="url(#breeze-release-management-publ [...]
-</text><text class="breeze-release-management-publish-docs-r4" x="12.2" 
y="264" textLength="73.2" 
clip-path="url(#breeze-release-management-publish-docs-line-10)">oracle</text><text
 class="breeze-release-management-publish-docs-r1" x="85.4" y="264" 
textLength="36.6" 
clip-path="url(#breeze-release-management-publish-docs-line-10)">&#160;|&#160;</text><text
 class="breeze-release-management-publish-docs-r4" x="122" y="264" 
textLength="109.8" clip-path="url(#breeze-release-management-publish [...]
-</text><text class="breeze-release-management-publish-docs-r4" x="12.2" 
y="288.4" textLength="85.4" 
clip-path="url(#breeze-release-management-publish-docs-line-11)">segment</text><text
 class="breeze-release-management-publish-docs-r1" x="97.6" y="288.4" 
textLength="36.6" 
clip-path="url(#breeze-release-management-publish-docs-line-11)">&#160;|&#160;</text><text
 class="breeze-release-management-publish-docs-r4" x="134.2" y="288.4" 
textLength="97.6" clip-path="url(#breeze-release-management [...]
-</text><text class="breeze-release-management-publish-docs-r4" x="12.2" 
y="312.8" textLength="61" 
clip-path="url(#breeze-release-management-publish-docs-line-12)">trino</text><text
 class="breeze-release-management-publish-docs-r1" x="73.2" y="312.8" 
textLength="36.6" 
clip-path="url(#breeze-release-management-publish-docs-line-12)">&#160;|&#160;</text><text
 class="breeze-release-management-publish-docs-r4" x="109.8" y="312.8" 
textLength="85.4" clip-path="url(#breeze-release-management-pub [...]
+</text><text class="breeze-release-management-publish-docs-r1" x="12.2" 
y="239.6" textLength="24.4" 
clip-path="url(#breeze-release-management-publish-docs-line-9)">|&#160;</text><text
 class="breeze-release-management-publish-docs-r4" x="36.6" y="239.6" 
textLength="109.8" 
clip-path="url(#breeze-release-management-publish-docs-line-9)">microsoft</text><text
 class="breeze-release-management-publish-docs-r1" x="146.4" y="239.6" 
textLength="12.2" clip-path="url(#breeze-release-management-publ [...]
+</text><text class="breeze-release-management-publish-docs-r4" x="12.2" 
y="264" textLength="97.6" 
clip-path="url(#breeze-release-management-publish-docs-line-10)">opsgenie</text><text
 class="breeze-release-management-publish-docs-r1" x="109.8" y="264" 
textLength="36.6" 
clip-path="url(#breeze-release-management-publish-docs-line-10)">&#160;|&#160;</text><text
 class="breeze-release-management-publish-docs-r4" x="146.4" y="264" 
textLength="73.2" clip-path="url(#breeze-release-management-pub [...]
+</text><text class="breeze-release-management-publish-docs-r4" x="12.2" 
y="288.4" textLength="61" 
clip-path="url(#breeze-release-management-publish-docs-line-11)">samba</text><text
 class="breeze-release-management-publish-docs-r1" x="73.2" y="288.4" 
textLength="36.6" 
clip-path="url(#breeze-release-management-publish-docs-line-11)">&#160;|&#160;</text><text
 class="breeze-release-management-publish-docs-r4" x="109.8" y="288.4" 
textLength="85.4" clip-path="url(#breeze-release-management-pub [...]
+</text><text class="breeze-release-management-publish-docs-r4" x="12.2" 
y="312.8" textLength="97.6" 
clip-path="url(#breeze-release-management-publish-docs-line-12)">telegram</text><text
 class="breeze-release-management-publish-docs-r1" x="109.8" y="312.8" 
textLength="36.6" 
clip-path="url(#breeze-release-management-publish-docs-line-12)">&#160;|&#160;</text><text
 class="breeze-release-management-publish-docs-r4" x="146.4" y="312.8" 
textLength="61" clip-path="url(#breeze-release-management [...]
 </text><text class="breeze-release-management-publish-docs-r1" x="1464" 
y="337.2" textLength="12.2" 
clip-path="url(#breeze-release-management-publish-docs-line-13)">
 </text><text class="breeze-release-management-publish-docs-r1" x="12.2" 
y="361.6" textLength="707.6" 
clip-path="url(#breeze-release-management-publish-docs-line-14)">Command&#160;to&#160;publish&#160;generated&#160;documentation&#160;to&#160;airflow-site</text><text
 class="breeze-release-management-publish-docs-r1" x="1464" y="361.6" 
textLength="12.2" 
clip-path="url(#breeze-release-management-publish-docs-line-14)">
 </text><text class="breeze-release-management-publish-docs-r1" x="1464" 
y="386" textLength="12.2" 
clip-path="url(#breeze-release-management-publish-docs-line-15)">
diff --git a/images/breeze/output_sbom_generate-providers-requirements.svg 
b/images/breeze/output_sbom_generate-providers-requirements.svg
index 1ac6396a3d..cb90b20960 100644
--- a/images/breeze/output_sbom_generate-providers-requirements.svg
+++ b/images/breeze/output_sbom_generate-providers-requirements.svg
@@ -193,9 +193,9 @@
 </text><text class="breeze-sbom-generate-providers-requirements-r5" x="0" 
y="337.2" textLength="12.2" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-13)">│</text><text
 class="breeze-sbom-generate-providers-requirements-r6" x="292.8" y="337.2" 
textLength="1146.8" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-13)">|&#160;daskexecutor&#160;|&#160;databricks&#160;|&#160;datadog&#160;|&#160;dbt.cloud&#160;|&#160;dingding&#160;|&#160;discord&#160;|&#160;doc
 [...]
 </text><text class="breeze-sbom-generate-providers-requirements-r5" x="0" 
y="361.6" textLength="12.2" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-14)">│</text><text
 class="breeze-sbom-generate-providers-requirements-r6" x="292.8" y="361.6" 
textLength="1146.8" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-14)">elasticsearch&#160;|&#160;exasol&#160;|&#160;facebook&#160;|&#160;ftp&#160;|&#160;github&#160;|&#160;google&#160;|&#160;grpc&#160;|&#160;hash
 [...]
 </text><text class="breeze-sbom-generate-providers-requirements-r5" x="0" 
y="386" textLength="12.2" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-15)">│</text><text
 class="breeze-sbom-generate-providers-requirements-r6" x="292.8" y="386" 
textLength="1146.8" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-15)">influxdb&#160;|&#160;jdbc&#160;|&#160;jenkins&#160;|&#160;microsoft.azure&#160;|&#160;microsoft.mssql&#160;|&#160;microsoft.psrp&#160;|&#160;&#16
 [...]
-</text><text class="breeze-sbom-generate-providers-requirements-r5" x="0" 
y="410.4" textLength="12.2" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-16)">│</text><text
 class="breeze-sbom-generate-providers-requirements-r6" x="292.8" y="410.4" 
textLength="1146.8" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-16)">microsoft.winrm&#160;|&#160;mongo&#160;|&#160;mysql&#160;|&#160;neo4j&#160;|&#160;odbc&#160;|&#160;openfaas&#160;|&#160;openlineage&#160;|&#1
 [...]
-</text><text class="breeze-sbom-generate-providers-requirements-r5" x="0" 
y="434.8" textLength="12.2" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-17)">│</text><text
 class="breeze-sbom-generate-providers-requirements-r6" x="292.8" y="434.8" 
textLength="1146.8" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-17)">opsgenie&#160;|&#160;oracle&#160;|&#160;pagerduty&#160;|&#160;papermill&#160;|&#160;pgvector&#160;|&#160;pinecone&#160;|&#160;plexus&#160;|&#
 [...]
-</text><text class="breeze-sbom-generate-providers-requirements-r5" x="0" 
y="459.2" textLength="12.2" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-18)">│</text><text
 class="breeze-sbom-generate-providers-requirements-r6" x="292.8" y="459.2" 
textLength="1146.8" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-18)">redis&#160;|&#160;salesforce&#160;|&#160;samba&#160;|&#160;segment&#160;|&#160;sendgrid&#160;|&#160;sftp&#160;|&#160;singularity&#160;|&#160;
 [...]
+</text><text class="breeze-sbom-generate-providers-requirements-r5" x="0" 
y="410.4" textLength="12.2" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-16)">│</text><text
 class="breeze-sbom-generate-providers-requirements-r6" x="292.8" y="410.4" 
textLength="1146.8" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-16)">microsoft.winrm&#160;|&#160;mongo&#160;|&#160;mysql&#160;|&#160;neo4j&#160;|&#160;odbc&#160;|&#160;openai&#160;|&#160;openfaas&#160;|&#160;op
 [...]
+</text><text class="breeze-sbom-generate-providers-requirements-r5" x="0" 
y="434.8" textLength="12.2" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-17)">│</text><text
 class="breeze-sbom-generate-providers-requirements-r6" x="292.8" y="434.8" 
textLength="1146.8" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-17)">|&#160;opsgenie&#160;|&#160;oracle&#160;|&#160;pagerduty&#160;|&#160;papermill&#160;|&#160;pgvector&#160;|&#160;pinecone&#160;|&#160;plexus&#
 [...]
+</text><text class="breeze-sbom-generate-providers-requirements-r5" x="0" 
y="459.2" textLength="12.2" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-18)">│</text><text
 class="breeze-sbom-generate-providers-requirements-r6" x="292.8" y="459.2" 
textLength="1146.8" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-18)">|&#160;redis&#160;|&#160;salesforce&#160;|&#160;samba&#160;|&#160;segment&#160;|&#160;sendgrid&#160;|&#160;sftp&#160;|&#160;singularity&#160;
 [...]
 </text><text class="breeze-sbom-generate-providers-requirements-r5" x="0" 
y="483.6" textLength="12.2" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-19)">│</text><text
 class="breeze-sbom-generate-providers-requirements-r6" x="292.8" y="483.6" 
textLength="1146.8" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-19)">snowflake&#160;|&#160;sqlite&#160;|&#160;ssh&#160;|&#160;tableau&#160;|&#160;tabular&#160;|&#160;telegram&#160;|&#160;trino&#160;|&#160;verti
 [...]
 </text><text class="breeze-sbom-generate-providers-requirements-r5" x="0" 
y="508" textLength="12.2" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-20)">│</text><text
 class="breeze-sbom-generate-providers-requirements-r6" x="292.8" y="508" 
textLength="1146.8" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-20)">|&#160;zendesk)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#16
 [...]
 </text><text class="breeze-sbom-generate-providers-requirements-r5" x="0" 
y="532.4" textLength="12.2" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-21)">│</text><text
 class="breeze-sbom-generate-providers-requirements-r4" x="24.4" y="532.4" 
textLength="12.2" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-21)">-</text><text
 class="breeze-sbom-generate-providers-requirements-r4" x="36.6" y="532.4" 
textLength="109.8" clip-path="url(#breeze-sbom-generate- [...]
diff --git a/tests/providers/openai/__init__.py 
b/tests/providers/openai/__init__.py
new file mode 100644
index 0000000000..13a83393a9
--- /dev/null
+++ b/tests/providers/openai/__init__.py
@@ -0,0 +1,16 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
diff --git a/tests/providers/openai/hooks/__init__.py 
b/tests/providers/openai/hooks/__init__.py
new file mode 100644
index 0000000000..13a83393a9
--- /dev/null
+++ b/tests/providers/openai/hooks/__init__.py
@@ -0,0 +1,16 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
diff --git a/tests/providers/openai/hooks/test_openai.py 
b/tests/providers/openai/hooks/test_openai.py
new file mode 100644
index 0000000000..cd811107f7
--- /dev/null
+++ b/tests/providers/openai/hooks/test_openai.py
@@ -0,0 +1,63 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+from __future__ import annotations
+
+from unittest.mock import Mock, patch
+
+import pytest
+
+from airflow.providers.openai.hooks.openai import OpenAIHook
+
+
[email protected]
+def openai_hook():
+    with 
patch("airflow.providers.openai.hooks.openai.OpenAIHook._get_api_key"), patch(
+        "airflow.providers.openai.hooks.openai.OpenAIHook._get_api_base"
+    ) as _:
+        yield OpenAIHook(conn_id="test_conn_id")
+
+
[email protected]
+def mock_embeddings_response():
+    return {"data": [{"embedding": [0.1, 0.2, 0.3]}]}
+
+
[email protected]
+def mock_completions_response():
+    return Mock(
+        id="completion-id",
+        object="completion",
+        created=1234567890,
+        model="text-davinci-002",
+        usage={"prompt_tokens": 15, "completion_tokens": 32, "total_tokens": 
47},
+        choices=[Mock(text="the quick brown fox", finish_reason="stop", 
index=0)],
+    )
+
+
+def test_create_embeddings(openai_hook, mock_embeddings_response):
+    text = "Sample text"
+    with patch("openai.Embedding.create", 
return_value=mock_embeddings_response):
+        embeddings = openai_hook.create_embeddings(text)
+    assert embeddings == [0.1, 0.2, 0.3]
+
+
+def test_get_api_key():
+    mock_connection = Mock()
+    mock_connection.password = "your_api_key"
+    OpenAIHook.get_connection = Mock(return_value=mock_connection)
+    api_key = OpenAIHook()._get_api_key()
+    assert api_key == "your_api_key"
diff --git a/tests/providers/openai/operators/__init__.py 
b/tests/providers/openai/operators/__init__.py
new file mode 100644
index 0000000000..13a83393a9
--- /dev/null
+++ b/tests/providers/openai/operators/__init__.py
@@ -0,0 +1,16 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
diff --git a/tests/providers/openai/operators/test_openai.py 
b/tests/providers/openai/operators/test_openai.py
new file mode 100644
index 0000000000..11a6483802
--- /dev/null
+++ b/tests/providers/openai/operators/test_openai.py
@@ -0,0 +1,36 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+from __future__ import annotations
+
+from unittest.mock import Mock
+
+from airflow.providers.openai.operators.openai import OpenAIEmbeddingOperator
+from airflow.utils.context import Context
+
+
+def test_execute_with_input_text():
+    operator = OpenAIEmbeddingOperator(
+        task_id="TaskId", conn_id="test_conn_id", model="test_model", 
input_text="Test input text"
+    )
+    mock_hook_instance = Mock()
+    mock_hook_instance.create_embeddings.return_value = [1.0, 2.0, 3.0]
+    operator.hook = mock_hook_instance
+
+    context = Context()
+    embeddings = operator.execute(context)
+
+    assert embeddings == [1.0, 2.0, 3.0]
diff --git a/tests/system/providers/openai/__init__.py 
b/tests/system/providers/openai/__init__.py
new file mode 100644
index 0000000000..13a83393a9
--- /dev/null
+++ b/tests/system/providers/openai/__init__.py
@@ -0,0 +1,16 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
diff --git a/tests/system/providers/openai/example_openai.py 
b/tests/system/providers/openai/example_openai.py
new file mode 100644
index 0000000000..ec8dd316b3
--- /dev/null
+++ b/tests/system/providers/openai/example_openai.py
@@ -0,0 +1,110 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+from __future__ import annotations
+
+import pendulum
+
+from airflow.decorators import dag, task
+from airflow.providers.openai.hooks.openai import OpenAIHook
+from airflow.providers.openai.operators.openai import OpenAIEmbeddingOperator
+
+
+def input_text_callable(
+    input_arg1: str,
+    input_arg2: str,
+    input_kwarg1: str = "default_kwarg1_value",
+    input_kwarg2: str = "default_kwarg1_value",
+):
+    text = " ".join([input_arg1, input_arg2, input_kwarg1, input_kwarg2])
+    return text
+
+
+@dag(
+    schedule=None,
+    start_date=pendulum.datetime(2021, 1, 1, tz="UTC"),
+    catchup=False,
+    tags=["example", "openai"],
+)
+def example_openai_dag():
+    """
+    ### TaskFlow API Tutorial Documentation
+    This is a simple data pipeline example which demonstrates the use of
+    the TaskFlow API using three simple tasks for Extract, Transform, and Load.
+    Documentation that goes along with the Airflow TaskFlow API tutorial is
+    located
+    
[here](https://airflow.apache.org/docs/apache-airflow/stable/tutorial_taskflow_api.html)
+    """
+
+    texts = [
+        "On Kernel-Target Alignment. We describe a family of global 
optimization procedures",
+        " that automatically decompose optimization problems into smaller 
loosely coupled",
+        " problems, then combine the solutions of these with message passing 
algorithms.",
+    ]
+
+    @task()
+    def create_embeddings_using_hook():
+        """
+        #### Extract task
+        A simple Extract task to get data ready for the rest of the data
+        pipeline. In this case, getting data is simulated by reading from a
+        hardcoded JSON string.
+        """
+        openai_hook = OpenAIHook()
+        embeddings = openai_hook.create_embeddings(texts[0])
+        return embeddings
+
+    @task()
+    def task_to_store_input_text_in_xcom():
+        return texts[0]
+
+    # [START howto_operator_openai_embedding]
+    OpenAIEmbeddingOperator(
+        task_id="embedding_using_xcom_data",
+        conn_id="openai_default",
+        input_text=task_to_store_input_text_in_xcom(),
+        model="text-embedding-ada-002",
+    )
+
+    OpenAIEmbeddingOperator(
+        task_id="embedding_using_callable",
+        conn_id="openai_default",
+        input_text=input_text_callable(
+            "input_arg1_value",
+            "input2_value",
+            input_kwarg1="input_kwarg1_value",
+            input_kwarg2="input_kwarg2_value",
+        ),
+        model="text-embedding-ada-002",
+    )
+    OpenAIEmbeddingOperator(
+        task_id="embedding_using_text",
+        conn_id="openai_default",
+        input_text=texts,
+        model="text-embedding-ada-002",
+    )
+    # [END howto_operator_openai_embedding]
+
+    create_embeddings_using_hook()
+
+
+example_openai_dag()
+
+
+from tests.system.utils import get_test_run  # noqa: E402
+
+# Needed to run the example DAG with pytest (see: 
tests/system/README.md#run_via_pytest)
+test_run = get_test_run(dag)


Reply via email to