kaxil opened a new pull request, #74679: URL: https://github.com/apache/airflow/pull/74679
Common AI 1.0 turns the stability page into a promise. Today it lists 10 stable features and 18 experimental ones, and several experimental rows give "new" or "options still settling" as the reason, which names no change anyone is planning. Released that way, most of what a user builds on would carry a "can change in a minor release" note. This moves the features whose behaviour has settled into the stable table, with a "what stays the same" entry for each, and drops their "Experimental" notes from the docs pages and docstrings: | Feature | What the stable entry promises | | -- | -- | | `@task.llm_sql` | Returns SQL without running it; with `validate_sql=True` the task fails unless the output is a single statement of an allowed type, with no write nested inside under the default types. A reviewer's edit is checked the same way. | | `@task.llm_file_analysis` | Reads the file or prefix read-only, samples tabular files to `sample_rows` and cuts text to `max_text_chars`; fails before the model call on input over the size limits, or on an image or PDF without `multi_modal=True`. | | `@task.llm_schema_compare` | Returns `SchemaCompareResult` as a dict: `compatible`, `summary`, and `mismatches` with a `critical`/`warning`/`info` severity. | | `@task.llm_batch` | Writes results as JSONL and returns the `schema_version: 1` manifest; a retry with the same `result_path` and unchanged inputs re-attaches to the submitted batch unless it was cancelled or failed. The `BatchAdapter` extension point stays experimental. | | `ObjectStorageToolset` | Three read-only tools, paths confined to the root, unreadable files reported to the model instead of failing the task. | | `pinned_arguments` on `HookToolset` | Pinned arguments are hidden from the model, passed to every allowed method, and a method that cannot take one is rejected when the toolset is created. | | The framework-neutral tool interface (`AirflowTool`, `ToolResult`, `ToolCallError`, `ToolProvider`, `collect_tools`, `airflow_tools()`) | The fields, the masking in `call()`, and the error semantics an adapter relies on. | Every row left in the experimental table now names an outside dependency before its own 1.0, a framework that changes often, or a specific change. Two of the old reasons were out of date: the amazon and google providers implement the managed-agent contract (`BedrockAgentCoreHook`, `AgentEngineHook`), and CI has run the Strands and ADK adapter tests since #73912. ## Design rationale **Why make the tool interface stable while two more adapters are in review?** #74026 (Claude Agent SDK) and #73962 (Anthropic tool runner) each add a new adapter module and change only one docstring line in `tools/__init__.py`, so two more frameworks fit the interface as it is. The Strands plugin and the ADK toolset built on it stay experimental, since they follow frameworks that change often. **Why not `durable=True` here?** Its stated reason is that a tool will be able to declare whether its result may be reused, and #74385 adds exactly that. It graduates in a follow-up stacked on this PR once #74385 merges, so the page never promises behaviour main does not have. **Why does per-tool approval stay experimental?** A task instance can pause for approval only once per Dag run, so an agent that needs a second approval later in the run fails with `ToolApprovalAlreadyRequestedError`. That is the normal shape of an agent loop, so it graduates together with the change that lifts the limit, stacked on this PR. From Airflow 3.4, core replaces a repeat request's details instead of keeping the first one's (#73235); 3.3 does not. **Why does `DecisionPolicy` stay experimental?** Whether the confidence gate keeps its shape or becomes part of a wider decision policy is still an open question, and graduating it now would turn either answer into a breaking change. **Why does the Agent Skills toolset stay experimental when `pydantic-ai-skills` is past 1.0?** Pydantic AI has since shipped on-demand loading of its own (pydantic/pydantic-ai#5230), and the toolset may move to it. That is the change its new reason names, and the skills page no longer calls #5230 "in flight". `LoggingToolset` keeps its experimental row. Making it private is a code change with its own trade-off (#74449 just exported it from `airflow.providers.common.ai.toolsets`), so it is not part of a docs PR. -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: [email protected] For queries about this service, please contact Infrastructure at: [email protected]
