providers/common/ai/docs/operators/llm_branch.rst
.. 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:llm_branch:
LLMBranchOperatorUse :class:~airflow.providers.common.ai.operators.llm_branch.LLMBranchOperator
for LLM-driven branching — where the LLM decides which downstream task(s) to
execute.
The operator discovers downstream tasks automatically from the DAG topology and presents them to the LLM as a constrained enum via pydantic-ai structured output. No text parsing or manual validation is needed.
.. seealso::
:ref:Connection configuration <howto/connection:pydanticai>
Connect the operator to downstream tasks. The LLM chooses which branch to execute based on the prompt:
.. exampleinclude:: /../../ai/src/airflow/providers/common/ai/example_dags/example_llm_branch.py :language: python :start-after: [START howto_operator_llm_branch_basic] :end-before: [END howto_operator_llm_branch_basic]
Set allow_multiple_branches=True to let the LLM select more than one
downstream task. All selected branches run; unselected branches are skipped:
.. exampleinclude:: /../../ai/src/airflow/providers/common/ai/example_dags/example_llm_branch.py :language: python :start-after: [START howto_operator_llm_branch_multi] :end-before: [END howto_operator_llm_branch_multi]
The @task.llm_branch decorator wraps LLMBranchOperator. The function
returns the prompt string; all other parameters are passed to the operator:
.. exampleinclude:: /../../ai/src/airflow/providers/common/ai/example_dags/example_llm_branch.py :language: python :start-after: [START howto_decorator_llm_branch] :end-before: [END howto_decorator_llm_branch]
With multiple branches:
.. exampleinclude:: /../../ai/src/airflow/providers/common/ai/example_dags/example_llm_branch.py :language: python :start-after: [START howto_decorator_llm_branch_multi] :end-before: [END howto_decorator_llm_branch_multi]
At execution time, the operator:
self.downstream_task_ids from the DAG topology.Enum with one member per downstream task ID.output_type to pydantic-ai, constraining the LLM to
valid task IDs only.do_branch() to skip non-selected downstream tasks.prompt: The prompt to send to the LLM (operator) or the return value of the
decorated function (decorator).llm_conn_id: Airflow connection ID for the LLM provider.model_id: Model identifier (e.g. "openai:gpt-5"). Overrides the connection's extra field.system_prompt: System-level instructions for the agent. Supports Jinja templating.allow_multiple_branches: When False (default) the LLM returns a single
task ID. When True the LLM may return one or more task IDs.agent_params: Additional keyword arguments passed to the pydantic-ai Agent
constructor (e.g. retries, model_settings). Supports Jinja templating.After each LLM call, the operator logs a summary with model name, token usage,
and request count at INFO level. See :ref:AgentOperator — Logging <howto/operator:agent>
for details on the log format.