From 18498137c0cd9e7fccb6d68ca218ecf77cc8a935 Mon Sep 17 00:00:00 2001 From: Ishaan Jaffer Date: Sat, 28 Feb 2026 18:00:31 -0800 Subject: [PATCH] feat(ui): add routing group API call functions to networking.tsx --- .../src/components/networking.tsx | 169 ++++++++++++++++++ 1 file changed, 169 insertions(+) diff --git a/ui/litellm-dashboard/src/components/networking.tsx b/ui/litellm-dashboard/src/components/networking.tsx index 0df6d813d7c..b538018a579 100644 --- a/ui/litellm-dashboard/src/components/networking.tsx +++ b/ui/litellm-dashboard/src/components/networking.tsx @@ -10035,3 +10035,172 @@ export const updateToolPolicy = async ( } return response.json(); }; + +export const routingGroupCreateCall = async ( + accessToken: string, + formValues: Record, +): Promise> => { + const url = proxyBaseUrl + ? `${proxyBaseUrl}/v1/routing_group` + : `/v1/routing_group`; + const response = await fetch(url, { + method: "POST", + headers: { + [globalLitellmHeaderName]: `Bearer ${accessToken}`, + "Content-Type": "application/json", + }, + body: JSON.stringify(formValues), + }); + if (!response.ok) { + const errorData = await response.text(); + handleError(errorData); + throw new Error("Network response was not ok"); + } + return response.json(); +}; + +export const routingGroupListCall = async ( + accessToken: string, + page: number = 1, + size: number = 50, +): Promise<{ routing_groups: Record[]; total: number; page: number; size: number }> => { + const url = proxyBaseUrl + ? `${proxyBaseUrl}/v1/routing_group?page=${page}&size=${size}` + : `/v1/routing_group?page=${page}&size=${size}`; + const response = await fetch(url, { + method: "GET", + headers: { + [globalLitellmHeaderName]: `Bearer ${accessToken}`, + "Content-Type": "application/json", + }, + }); + if (!response.ok) { + const errorData = await response.text(); + handleError(errorData); + throw new Error("Network response was not ok"); + } + return response.json(); +}; + +export const routingGroupGetCall = async ( + accessToken: string, + routingGroupId: string, +): Promise> => { + const url = proxyBaseUrl + ? `${proxyBaseUrl}/v1/routing_group/${routingGroupId}` + : `/v1/routing_group/${routingGroupId}`; + const response = await fetch(url, { + method: "GET", + headers: { + [globalLitellmHeaderName]: `Bearer ${accessToken}`, + "Content-Type": "application/json", + }, + }); + if (!response.ok) { + const errorData = await response.text(); + handleError(errorData); + throw new Error("Network response was not ok"); + } + return response.json(); +}; + +export const routingGroupUpdateCall = async ( + accessToken: string, + routingGroupId: string, + formValues: Record, +): Promise> => { + const url = proxyBaseUrl + ? `${proxyBaseUrl}/v1/routing_group/${routingGroupId}` + : `/v1/routing_group/${routingGroupId}`; + const response = await fetch(url, { + method: "PUT", + headers: { + [globalLitellmHeaderName]: `Bearer ${accessToken}`, + "Content-Type": "application/json", + }, + body: JSON.stringify(formValues), + }); + if (!response.ok) { + const errorData = await response.text(); + handleError(errorData); + throw new Error("Network response was not ok"); + } + return response.json(); +}; + +export const routingGroupDeleteCall = async ( + accessToken: string, + routingGroupId: string, +): Promise> => { + const url = proxyBaseUrl + ? `${proxyBaseUrl}/v1/routing_group/${routingGroupId}` + : `/v1/routing_group/${routingGroupId}`; + const response = await fetch(url, { + method: "DELETE", + headers: { + [globalLitellmHeaderName]: `Bearer ${accessToken}`, + "Content-Type": "application/json", + }, + }); + if (!response.ok) { + const errorData = await response.text(); + handleError(errorData); + throw new Error("Network response was not ok"); + } + return response.json(); +}; + +export const routingGroupTestCall = async ( + accessToken: string, + routingGroupId: string, + messages?: Array>, + mock: boolean = false, +): Promise> => { + const url = proxyBaseUrl + ? `${proxyBaseUrl}/v1/routing_group/${routingGroupId}/test` + : `/v1/routing_group/${routingGroupId}/test`; + const response = await fetch(url, { + method: "POST", + headers: { + [globalLitellmHeaderName]: `Bearer ${accessToken}`, + "Content-Type": "application/json", + }, + body: JSON.stringify({ messages, mock }), + }); + if (!response.ok) { + const errorData = await response.text(); + handleError(errorData); + throw new Error("Network response was not ok"); + } + return response.json(); +}; + +export const routingGroupSimulateCall = async ( + accessToken: string, + routingGroupId: string, + config: { + num_requests: number; + concurrency: number; + mock: boolean; + failure_injection?: { deployment_failure_rates: Record }; + }, +): Promise> => { + const url = proxyBaseUrl + ? `${proxyBaseUrl}/v1/routing_group/${routingGroupId}/simulate` + : `/v1/routing_group/${routingGroupId}/simulate`; + const response = await fetch(url, { + method: "POST", + headers: { + [globalLitellmHeaderName]: `Bearer ${accessToken}`, + "Content-Type": "application/json", + }, + body: JSON.stringify(config), + }); + if (!response.ok) { + const errorData = await response.text(); + handleError(errorData); + throw new Error("Network response was not ok"); + } + return response.json(); +}; +};