Skip to content

Add a generated supported services page for the common.ai provider - #72939

Open
Lee-W wants to merge 4 commits into
apache:mainfrom
astronomer:common-ai-supported-services-page
Open

Lee-W wants to merge 4 commits into
apache:mainfrom
astronomer:common-ai-supported-services-page

Conversation

@Lee-W

@Lee-W Lee-W commented Sep 11, 2026 •

Copy link
Copy Markdown
Member

Why

Nothing told a user what common.ai actually reaches — the answer was spread across the toolsets guide, the index page, seven connection pages and provider.yaml, so the differentiating half (the Airflow hooks, MCP servers, SQL warehouses, DataFusion tables, sandboxes and vendor-managed agents a toolset gives you over a raw SDK call) was effectively unwritten.

The model list had also drifted: it was a hand-copied snapshot of nine vendors while the connection resolves anything pydantic_ai.providers can construct, so services we already support — Snowflake Cortex and OpenRouter among them — were absent from the page a customer searches.

What

  • provider.yaml becomes the one source the docs page and the registry read for connection types: pydanticai and mcp get their external-services lists completed, including the vendors pydantic-ai added up to 2.48.
  • A new provider-connection-services directive renders those lists as a table on a new Supported services page, listed in the provider's Guides and cross-linked with Models and providers.
  • Toolsets are a common.ai concept, so their table is hand-written on that page instead of going through the shared schema, and test_provider_metadata.py keeps it in step with the toolset modules and their doc pages.
  • The same test module guards the vendor list against pydantic-ai: every installed provider module is either listed or excluded, and each exclusion has a test that fails if it stops holding.
  • The LangChain connection page drops its hand-maintained vendor sentence and points at the new page.

Was generative AI tooling used to co-author this PR?
  • Yes (please specify the tool below)

Generated-by: [Claude] following the guidelines


  • Read the Pull Request Guidelines for more information. Note: commit author/co-author name and email in commits become permanently public when merged.
  • For fundamental code changes, an Airflow Improvement Proposal (AIP) is needed.
  • When adding dependency, check compliance with the ASF 3rd Party License Policy.
  • For significant user-facing changes create newsfragment: {pr_number}.significant.rst, in airflow-core/newsfragments. You can add this file in a follow-up commit after the PR is created so you know the PR number.

@Lee-W
Lee-W force-pushed the common-ai-supported-services-page branch 3 times, most recently from a5292df to 5479098 Compare September 17, 2026 09:25
@Lee-W
Lee-W marked this pull request as ready for review September 17, 2026 09:26
@kaxil

kaxil commented Sep 17, 2026

Copy link
Copy Markdown
Member

@Lee-W Screenshots would be very helpful

@Lee-W
Lee-W force-pushed the common-ai-supported-services-page branch from 5479098 to 0595000 Compare September 18, 2026 08:00
@Lee-W

Lee-W commented Sep 18, 2026 •

Copy link
Copy Markdown
Member Author
01-supported-services-full
02-connections-table
03-toolsets-table
04-index-link
05-langchain-supported-providers

Comment thread contributing-docs/23_provider_hook_migration_to_yaml.rst Outdated
Comment thread devel-common/src/sphinx_exts/providers_extensions.py Outdated
Comment thread providers/common/ai/tests/unit/common/ai/test_provider_metadata.py Outdated
@Lee-W
Lee-W force-pushed the common-ai-supported-services-page branch from 0595000 to 9c161ee Compare September 19, 2026 01:27
@Lee-W
Lee-W marked this pull request as draft September 19, 2026 07:54
@Lee-W
Lee-W marked this pull request as ready for review September 19, 2026 07:56

@kaxil kaxil left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

One thing I am concerned about is -- "toolsets" is the concept of Common AI provider and doesn't apply more generally to other providers. So calling it toolsets is weird.

I wonder if you can do something specific to only Common AI provider for now.. even if needs to be manually maintained (ideally not)

@Lee-W

Lee-W commented Sep 28, 2026

Copy link
Copy Markdown
Member Author

Moved the toolset into common.ai.

Remove

  • toolsets.external-services schema key
  • provider-toolset-services directive
  • the contributing-docs section

The Toolsets table on the Supported services page is now hand-written in the common.ai docs.

@Lee-W
Lee-W requested a review from kaxil September 28, 2026 07:49
@Lee-W
Lee-W marked this pull request as ready for review September 28, 2026 07:49
Readers had no single place to see what this provider reaches. The
answer was spread across the toolsets guide, the index page, seven
connection pages and provider.yaml, so the differentiating half — the
Airflow hooks, MCP servers, SQL warehouses, DataFusion tables,
sandboxes and vendor-managed agents a toolset gives you over a raw SDK
call — was effectively unwritten.

The model list had also drifted. It was a hand-copied snapshot of nine
vendors while the connection actually resolves anything
pydantic_ai.providers can construct, so services we already support,
Snowflake Cortex and OpenRouter among them, were absent from the page a
customer searches.

Making provider.yaml the one source both the page and the registry read
keeps them from disagreeing, and a test that derives the reachable set
from pydantic-ai turns a drift into a red build naming the vendor
rather than a quiet omission.

That list is derived from a current pydantic-ai, while the provider
supports pydantic-ai-slim from 2.23.0 upward and CI exercises exactly
that floor. Snowflake Cortex and Crusoe reach back only to 2.27.0 and
2.28.0, so a vendor being absent downstream is a version difference
rather than drift. The test therefore asserts on every supported
version that an installed vendor is declared, and defers the opposite
direction to the release that carries all of them.
Toolsets are a common.ai concept rather than a provider-wide one, so a
provider.yaml schema field and a globally registered Sphinx directive for
them would invite other providers to adopt a shape that does not apply to
them. The toolset table now lives with the common.ai docs and is guarded
by the provider's own metadata tests; the connection-type services table
keeps using the shared mechanism, since that field already exists for
every provider.
The bumped pydantic-ai-slim ships GitHub Copilot, OpenAI Codex and vLLM
provider modules. GitHub Copilot and vLLM take the api_key and base_url
the pydanticai connection passes, so they are reachable and listed.
OpenAI Codex only reads credentials produced by the Codex CLI OAuth
login, which no connection field can express, so it stays off the list.
… list

pydantic-ai-slim 2.48 ships a TypeSafe provider module. It takes the
api_key and base_url the pydanticai connection passes, so it is reachable
and listed. It first appears in 2.45, above the 2.33 floor the low-dep
job installs, so the "declared but absent upstream" checks start from
there.
@kaxil

kaxil commented Oct 10, 2026

Copy link
Copy Markdown
Member

Toolsets external-services tracking moved off provider.yaml's schema and the shared Sphinx directive entirely. It's a hand-maintained table in supported_services.rst now, and four drift tests in test_provider_metadata.py catch a missing entry, a stale one, or a broken doc target. The dangling file citation in the module docstring is gone too, with the derivation documented at each constant instead.

GitHub Copilot and vLLM are reachable through the pydanticai connection and now listed. OpenAI Codex stays off because it only reads OAuth credentials the hook has no way to pass, and TypeSafe landed with the version floor bumped to 2.45 to match.

test_hook_incompatible_auth_modules_stay_incompatible duplicates the provider-class-discovery logic from test_deprecated_upstream_modules_stay_deprecated almost line for line, worth collapsing into one helper at some point. The TypeSafe commit also sneaks in the ObjectStorageToolset table entry that a867f66's own drift test should have caught when that commit landed, not here, though it's a one-line fix either way.

Good to merge from me.

@Lee-W

Lee-W commented Oct 10, 2026 •

Copy link
Copy Markdown
Member Author

@kaxil Thanks for taking another look. But will need your help revoke request change and approve before we can merge it. Thanks!

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants