Skip to content

Show which LLM providers each Common AI connection type reaches - #70497

Merged
Lee-W merged 12 commits into
apache:mainfrom
astronomer:registry-llm-connection-matrix
Aug 6, 2026
Merged

Show which LLM providers each Common AI connection type reaches#70497
Lee-W merged 12 commits into
apache:mainfrom
astronomer:registry-llm-connection-matrix

Conversation

@Lee-W

@Lee-W Lee-W commented Jul 27, 2026

Copy link
Copy Markdown
Member

Why

Common AI provider page shows pydanticai, pydanticai-azure, pydanticai-bedrock, langchain, etc. but not upstream service (Anthropic, AWS Bedrock, Ollama, ...) each one actually talks to without reading source code.

What

Add an optional external-integrations list to the connection-types schema and populate it in the Common AI provider.yaml from the existing connection docs, thread it through the registry metadata extractor and contract model, and render it as a small badge list under each connection chip on the provider detail page.

image
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.

Comment thread providers/common/ai/provider.yaml Outdated
Comment thread dev/registry/extract_metadata.py Outdated
Comment thread providers/common/ai/provider.yaml Outdated
Comment thread airflow-core/src/airflow/provider.yaml.schema.json Outdated
Comment thread dev/registry/registry_contract_models.py Outdated
@Lee-W
Lee-W force-pushed the registry-llm-connection-matrix branch from 3808b0a to 3544dd4 Compare August 3, 2026 00:38
Comment thread providers/common/ai/provider.yaml
Comment thread providers/common/ai/provider.yaml
Comment thread registry/src/css/main.css Outdated
@Lee-W
Lee-W force-pushed the registry-llm-connection-matrix branch 2 times, most recently from ecdbe47 to fed575f Compare August 5, 2026 03:41
@Lee-W
Lee-W force-pushed the registry-llm-connection-matrix branch 6 times, most recently from 4769100 to 551f921 Compare August 6, 2026 08:19
Lee-W added 12 commits August 6, 2026 16:23
Registry visitors browsing the Common AI provider page could see chips
for pydanticai, pydanticai-azure, pydanticai-bedrock, langchain, etc.
but had no way to tell which upstream service (Anthropic, AWS Bedrock,
Ollama, ...) each one actually talks to without reading source code.

Add an optional external-integrations list to the connection-types
schema and populate it in the Common AI provider.yaml from the
existing connection docs, thread it through the registry metadata
extractor and contract model, and render it as a small badge list
under each connection chip on the provider detail page.
Cramming a variable-length badge list under each connection-type chip
(one connection type has 9 upstream providers, others have just 1)
produced uneven, hard-to-scan rows in the chip strip. Keep the chip
row uniform and move the upstream-provider data into its own compact
table below it.
Rows with many upstream providers (pydanticai has 9) made the table
feel noisy even after moving badges out of the chip row. Collapse any
row with more than 4 providers behind a "Show N providers" toggle,
reusing the same details/summary show/hide pattern already used for
the Dependencies list on this page. Short rows stay as plain badges.
The badge-pill styling and its show/hide toggle added a second
interaction pattern on top of the existing clickable chip row,
making the section feel fussy. Render each row's upstream providers
as a plain comma-separated list instead -- still fully visible at a
glance, no extra affordance, and visually lighter than bordered
pills.
The previous name sat one key away from provider.yaml's top-level
integrations, which describes a different axis entirely -- framework
integrations that drive docs pages, logos and tags -- so provider authors
skimming the schema could easily conflate the two. The field also had no
entry in the one document where authors learn what connection-types
sub-fields exist, leaving it undiscoverable.
The LlamaIndex entry advertised vendors the connection cannot actually
reach: the hook only ever builds llama-index's OpenAI classes, and the
vendors it documents as needing direct instantiation bypass the hook and
the connection entirely. Mistral was also spelled two different ways
across entries that render in the same table, reading as two separate
upstreams, and DeepSeek was absent even though the Pydantic AI hook
covers it.
The registry version page reads connection types from a different source
for superseded releases than for the latest one, so a field only present
in the latest-release extractor makes the table visible while a release
is current and then silently disappear once a newer one ships.
The field had no coverage at all, so removing the line that reads it out
of provider.yaml would not have failed anything. Driving both extractors
through the connection contract, which forbids extra keys, also ties the
YAML key, the extracted JSON key and the contract field name together so
a rename in one of them can no longer drift silently past CI.
The three generic AI connection types applied three different rules to
OpenAI-compatible self-hosted endpoints, so the registry table read as if
the langchain connection could not reach vLLM. Every one of these hooks
passes conn.host straight through as base_url, and none of their
docstrings name LM Studio, so the lists now follow what the hooks
actually document as reachable.
The registry rendered a bare "External services" column, so a reader takes
the list as the complete set. The generic AI connection types resolve their
destination from a caller-supplied model identifier, so they reach whatever
service that identifier names: an enumeration can never be complete, and it
would need an edit every time an upstream library adds a provider. Saying so
where readers meet the field keeps a partial list from reading as a
compatibility matrix.
The provider.yaml field settled on external-services, but the table's CSS
classes and comment still carried the earlier "integrations" name. Nothing
consumes them yet, so renaming now costs nothing and avoids leaving a name
in the stylesheet that no longer matches anything readers can look up.
@Lee-W
Lee-W force-pushed the registry-llm-connection-matrix branch from 551f921 to 07fa2b9 Compare August 6, 2026 08:32
@Lee-W
Lee-W merged commit 43384c7 into apache:main Aug 6, 2026
155 checks passed
@Lee-W
Lee-W deleted the registry-llm-connection-matrix branch August 6, 2026 10:01
@github-project-automation github-project-automation Bot moved this from Backlog to Done in Airflow Registry Aug 6, 2026
@github-actions

github-actions Bot commented Aug 6, 2026

Copy link
Copy Markdown
Contributor

Backport failed to create: v3-3-test. View the failure log Run details

Note: As of Merging PRs targeted for Airflow 3.X
the committer who merges the PR is responsible for backporting the PRs that are bug fixes (generally speaking) to the maintenance branches.

In matter of doubt please ask in #release-management Slack channel.

Status Branch Result
v3-3-test Commit Link

You can attempt to backport this manually by running:

cherry_picker 43384c7 v3-3-test

This should apply the commit to the v3-3-test branch and leave the commit in conflict state marking
the files that need manual conflict resolution.

After you have resolved the conflicts, you can continue the backport process by running:

cherry_picker --continue

If you don't have cherry-picker installed, see the installation guide.

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

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

2 participants