Skip to content

refactor(connectors)!: move connector routes to /v1alpha/admin/connectors#5659

Merged
leseb merged 3 commits into
ogx-ai:mainfrom
mattf:move-connectors-api
May 11, 2026
Merged

refactor(connectors)!: move connector routes to /v1alpha/admin/connectors#5659
leseb merged 3 commits into
ogx-ai:mainfrom
mattf:move-connectors-api

Conversation

@mattf

@mattf mattf commented Apr 29, 2026

Copy link
Copy Markdown
Collaborator

Connectors are admin controlled resources.

Connector routes previously served at /v1beta/connectors/* are now served at /v1alpha/admin/connectors/* as part of the admin router.

Admin protocol now extends Connectors, so AdminImpl satisfies both protocols. AdminImpl delegates connector methods to the injected ConnectorServiceImpl. The standalone connectors FastAPI router is removed; admin/fastapi_routes.py owns all connector routes.

…tors

Connectors are admin controlled resources.

Connector routes previously served at /v1beta/connectors/* are now served
at /v1alpha/admin/connectors/* as part of the admin router.

Admin protocol now extends Connectors, so AdminImpl satisfies both
protocols. AdminImpl delegates connector methods to the injected
ConnectorServiceImpl. The standalone connectors FastAPI router is removed;
admin/fastapi_routes.py owns all connector routes.

Signed-off-by: Matthew Farrellee <matt@cs.wisc.edu>
@github-actions

github-actions Bot commented Apr 29, 2026

Copy link
Copy Markdown
Contributor

✱ Stainless preview builds

This PR will update the llama-stack-client SDKs with the following commit message.

refactor(connectors)!: move connector routes to /v1alpha/admin/connectors

Edit this comment to update it. It will appear in the SDK's changelogs.

llama-stack-client-go studio · conflict

Your SDK build had at least one new note diagnostic, which is a regression from the base state.

New diagnostics (4 note)
💡 Endpoint/NotConfigured: Skipped endpoint because it's not in your Stainless config: `get /v1alpha/admin/connectors`
💡 Endpoint/NotConfigured: Skipped endpoint because it's not in your Stainless config: `get /v1alpha/admin/connectors/{connector_id}/tools/{tool_name}`
💡 Endpoint/NotConfigured: Skipped endpoint because it's not in your Stainless config: `get /v1alpha/admin/connectors/{connector_id}/tools`
💡 Endpoint/NotConfigured: Skipped endpoint because it's not in your Stainless config: `get /v1alpha/admin/connectors/{connector_id}`
llama-stack-client-node studio · conflict

Your SDK build had at least one new note diagnostic, which is a regression from the base state.

New diagnostics (4 note)
💡 Endpoint/NotConfigured: Skipped endpoint because it's not in your Stainless config: `get /v1alpha/admin/connectors`
💡 Endpoint/NotConfigured: Skipped endpoint because it's not in your Stainless config: `get /v1alpha/admin/connectors/{connector_id}/tools/{tool_name}`
💡 Endpoint/NotConfigured: Skipped endpoint because it's not in your Stainless config: `get /v1alpha/admin/connectors/{connector_id}/tools`
💡 Endpoint/NotConfigured: Skipped endpoint because it's not in your Stainless config: `get /v1alpha/admin/connectors/{connector_id}`
llama-stack-client-openapi studio · code · diff

Your SDK build had at least one "warning" diagnostic, but this did not represent a regression.
generate ⚠️

New diagnostics (4 note)
💡 Endpoint/NotConfigured: Skipped endpoint because it's not in your Stainless config: `get /v1alpha/admin/connectors`
💡 Endpoint/NotConfigured: Skipped endpoint because it's not in your Stainless config: `get /v1alpha/admin/connectors/{connector_id}/tools/{tool_name}`
💡 Endpoint/NotConfigured: Skipped endpoint because it's not in your Stainless config: `get /v1alpha/admin/connectors/{connector_id}/tools`
💡 Endpoint/NotConfigured: Skipped endpoint because it's not in your Stainless config: `get /v1alpha/admin/connectors/{connector_id}`
llama-stack-client-python studio · code · diff

Your SDK build had at least one "warning" diagnostic, but this did not represent a regression.
generate ⚠️build ⏭️lint ⏭️test ✅

New diagnostics (4 note)
💡 Endpoint/NotConfigured: Skipped endpoint because it's not in your Stainless config: `get /v1alpha/admin/connectors`
💡 Endpoint/NotConfigured: Skipped endpoint because it's not in your Stainless config: `get /v1alpha/admin/connectors/{connector_id}/tools/{tool_name}`
💡 Endpoint/NotConfigured: Skipped endpoint because it's not in your Stainless config: `get /v1alpha/admin/connectors/{connector_id}/tools`
💡 Endpoint/NotConfigured: Skipped endpoint because it's not in your Stainless config: `get /v1alpha/admin/connectors/{connector_id}`

This comment is auto-generated by GitHub Actions and is automatically kept up to date as you push.
If you push custom code to the preview branch, re-run this workflow to update the comment.
Last updated: 2026-04-29 15:38:34 UTC

@leseb

leseb commented Apr 29, 2026

Copy link
Copy Markdown
Collaborator

Connectors are admin controlled resources.

Can you expand on that? I'd say so are all our server configs (inference, vector db etc) - what's so unique about Connectors versus other resources?

@mattf

mattf commented Apr 29, 2026

Copy link
Copy Markdown
Collaborator Author

Connectors are admin controlled resources.

Can you expand on that? I'd say so are all our server configs (inference, vector db etc) - what's so unique about Connectors versus other resources?

inference is definitely also an admin controlled resource, we don't let users install new inference providers

vector dbs are user scoped resources, while the available vector providers are admin controlled resources

connectors are a shorthand in Responses that are cross user.

@mattf mattf marked this pull request as ready for review April 29, 2026 15:41
@leseb

leseb commented Apr 29, 2026

Copy link
Copy Markdown
Collaborator

i find it strange that users have to go through an /admin endpoint to list available connectors, feels off. to me connectors are no different than tools at this point and they don't serve through /admin?

@mattf

mattf commented Apr 29, 2026

Copy link
Copy Markdown
Collaborator Author

i find it strange that users have to go through an /admin endpoint to list available connectors, feels off. to me connectors are no different than tools at this point and they don't serve through /admin?

the connectors should only be a narrow set of options, defined in the api -

image

maybe an admin wants to extend this with an internal tool where the user isn't allowed to know the url. for everything else the user knows the url and should just pass it directly.

@mattf

mattf commented May 7, 2026

Copy link
Copy Markdown
Collaborator Author

@leseb @franciscojavierarceo @cdoern @raghotham please weigh in

@franciscojavierarceo

Copy link
Copy Markdown
Collaborator

I agree with @mattf fwiw

@leseb leseb left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

the only reason for me for this to go behind /v1/admin is that user have no apis to fetch those connector and they are only described in the api

@leseb

leseb commented May 11, 2026

Copy link
Copy Markdown
Collaborator

@mattf if we do this, then the /v1/tools endpoint should also move to /v1/admin

@cdoern cdoern left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

+1 on the logic of why this should be behind admin. lets get this in

@leseb leseb added this pull request to the merge queue May 11, 2026
@github-merge-queue github-merge-queue Bot removed this pull request from the merge queue due to no response for status checks May 11, 2026
@leseb leseb added this pull request to the merge queue May 11, 2026
Merged via the queue into ogx-ai:main with commit 8e3cb7e May 11, 2026
81 checks passed
leseb added a commit to leseb/ogx that referenced this pull request May 12, 2026
# What does this PR do?

Moves the `GET /v1/tools` endpoint to `GET /v1/admin/tools`, following
the same pattern as ogx-ai#5659 (connectors → admin). Tools are
admin-controlled resources configured at the distribution level, not
user-scoped — users don't register or unregister tool groups. The
rationale is identical to the connectors move.

**Pattern followed from ogx-ai#5659:**
- `Admin` protocol gains `list_tools` method
- `AdminImpl` delegates to the `ToolGroupsRoutingTable` via `self.deps`
- Tools `fastapi_routes.py` deleted; route served by the admin router
- Admin router restructured with sub-routers to support both `/v1alpha`
(existing admin endpoints) and `/v1` (tools) prefixes

**BREAKING CHANGE:** `GET /v1/tools` is removed. Use `GET
/v1/admin/tools` instead.

## Test Plan

1. Pre-commit checks pass (all except `api-conformance` which is
expected for breaking changes — the `refactor!:` commit message signals
intentional breakage)
2. Unit tests pass: `uv run pytest tests/unit/core/ --tb=short -q -k
"tool or route or admin"` — 77 passed
3. mypy passes with no errors
4. OpenAPI specs regenerated and validated

---------

Signed-off-by: Sébastien Han <seb@redhat.com>
Signed-off-by: Charlie Doern <cdoern@redhat.com>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-authored-by: Charlie Doern <cdoern@redhat.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants