From bde46a3bb95e5d4b09a2d74c184ee29e67cfb16a Mon Sep 17 00:00:00 2001 From: Jake Howell Date: Mon, 15 Dec 2025 13:41:10 +0000 Subject: [PATCH 1/2] feat: move `API` aibridge functions to `/v2` --- site/src/api/api.ts | 37 +++++++++---------- site/src/api/queries/aiBridge.ts | 2 +- .../RequestLogsFilter/ModelFilter.tsx | 4 +- 3 files changed, 20 insertions(+), 23 deletions(-) diff --git a/site/src/api/api.ts b/site/src/api/api.ts index 97f0c8e4278a1..592510c1d39c6 100644 --- a/site/src/api/api.ts +++ b/site/src/api/api.ts @@ -2744,6 +2744,23 @@ class ApiMethods { setTimeout(() => res(), 500); }); }; + + getAIBridgeInterceptions = async (options: SearchParamOptions) => { + const url = getURLWithSearchParams( + "/api/v2/aibridge/interceptions", + options, + ); + const response = + await this.axios.get(url); + return response.data; + }; + + getAIBridgeModels = async (options: SearchParamOptions) => { + const url = getURLWithSearchParams("/api/v2/aibridge/models", options); + + const response = await this.axios.get(url); + return response.data; + }; } export type TaskFeedbackRating = "good" | "okay" | "bad"; @@ -2760,26 +2777,6 @@ export type CreateTaskFeedbackRequest = { // above the ApiMethods class for a full explanation. class ExperimentalApiMethods { constructor(protected readonly axios: AxiosInstance) {} - - getAIBridgeInterceptions = async (options: SearchParamOptions) => { - const url = getURLWithSearchParams( - "/api/experimental/aibridge/interceptions", - options, - ); - const response = - await this.axios.get(url); - return response.data; - }; - - getAIBridgeModels = async (options: SearchParamOptions) => { - const url = getURLWithSearchParams( - "/api/experimental/aibridge/models", - options, - ); - - const response = await this.axios.get(url); - return response.data; - }; } // This is a hard coded CSRF token/cookie pair for local development. In prod, diff --git a/site/src/api/queries/aiBridge.ts b/site/src/api/queries/aiBridge.ts index 1e385bc464564..987555aabcffd 100644 --- a/site/src/api/queries/aiBridge.ts +++ b/site/src/api/queries/aiBridge.ts @@ -13,7 +13,7 @@ export const paginatedInterceptions = ( return ["aiBridgeInterceptions", payload, pageNumber] as const; }, queryFn: ({ limit, offset, payload }) => - API.experimental.getAIBridgeInterceptions({ + API.getAIBridgeInterceptions({ offset, limit, q: payload, diff --git a/site/src/pages/AIBridgePage/RequestLogsPage/RequestLogsFilter/ModelFilter.tsx b/site/src/pages/AIBridgePage/RequestLogsPage/RequestLogsFilter/ModelFilter.tsx index 50df1339ee4d1..cdebd924ef635 100644 --- a/site/src/pages/AIBridgePage/RequestLogsPage/RequestLogsFilter/ModelFilter.tsx +++ b/site/src/pages/AIBridgePage/RequestLogsPage/RequestLogsFilter/ModelFilter.tsx @@ -17,7 +17,7 @@ export const useModelFilterMenu = ({ return useFilterMenu({ id: "model", getSelectedOption: async () => { - const modelsRes = await API.experimental.getAIBridgeModels({ + const modelsRes = await API.getAIBridgeModels({ q: value, limit: 1, }); @@ -33,7 +33,7 @@ export const useModelFilterMenu = ({ return null; }, getOptions: async (query) => { - const modelsRes = await API.experimental.getAIBridgeModels({ + const modelsRes = await API.getAIBridgeModels({ q: query, limit: 25, }); From 66b13420b9620c03b495aaca808dd95d28a1082b Mon Sep 17 00:00:00 2001 From: Jake Howell Date: Mon, 15 Dec 2025 13:47:12 +0000 Subject: [PATCH 2/2] fix: remove `ExperimentalHandler` --- coderd/coderd.go | 4 ---- enterprise/coderd/coderd.go | 6 ------ 2 files changed, 10 deletions(-) diff --git a/coderd/coderd.go b/coderd/coderd.go index e08a2a3036885..a8b6f348a8a2f 100644 --- a/coderd/coderd.go +++ b/coderd/coderd.go @@ -1019,8 +1019,6 @@ func New(options *Options) *API { // Experimental routes are not guaranteed to be stable and may change at any time. r.Route("/api/experimental", func(r chi.Router) { - api.ExperimentalHandler = r - r.NotFound(func(rw http.ResponseWriter, _ *http.Request) { httpapi.RouteNotFound(rw) }) r.Use( // Specific routes can specify different limits, but every rate @@ -1828,8 +1826,6 @@ type API struct { // APIHandler serves "/api/v2" APIHandler chi.Router - // ExperimentalHandler serves "/api/experimental" - ExperimentalHandler chi.Router // RootHandler serves "/" RootHandler chi.Router diff --git a/enterprise/coderd/coderd.go b/enterprise/coderd/coderd.go index bf1a5acf531ee..ad78e72c1daf3 100644 --- a/enterprise/coderd/coderd.go +++ b/enterprise/coderd/coderd.go @@ -226,12 +226,6 @@ func New(ctx context.Context, options *Options) (_ *API, err error) { return api.refreshEntitlements(ctx) } - api.AGPL.ExperimentalHandler.Group(func(r chi.Router) { - // Deprecated. - // TODO: remove with Beta release. - r.Route("/aibridge", aibridgeHandler(api, apiKeyMiddleware)) - }) - api.AGPL.APIHandler.Group(func(r chi.Router) { r.Route("/aibridge", aibridgeHandler(api, apiKeyMiddleware)) })