build(ui/general_settings.tsx): support updating global max parallel requests on the ui

This commit is contained in:
Krrish Dholakia 2024-05-15 19:26:57 -07:00
parent 6a357b4275
commit 153ce0d085
4 changed files with 491 additions and 110 deletions

View file

@ -14,15 +14,17 @@ export interface Model {
export const modelCostMap = async () => {
try {
const response = await fetch('https://raw.githubusercontent.com/BerriAI/litellm/main/model_prices_and_context_window.json');
const response = await fetch(
"https://raw.githubusercontent.com/BerriAI/litellm/main/model_prices_and_context_window.json"
);
const jsonData = await response.json();
console.log(`received data: ${jsonData}`)
return jsonData
console.log(`received data: ${jsonData}`);
return jsonData;
} catch (error) {
console.error("Failed to get model cost map:", error);
throw error;
}
}
};
export const modelCreateCall = async (
accessToken: string,
@ -50,19 +52,21 @@ export const modelCreateCall = async (
const data = await response.json();
console.log("API Response:", data);
message.success("Model created successfully. Wait 60s and refresh on 'All Models' page");
message.success(
"Model created successfully. Wait 60s and refresh on 'All Models' page"
);
return data;
} catch (error) {
console.error("Failed to create key:", error);
throw error;
}
}
};
export const modelDeleteCall = async (
export const modelDeleteCall = async (
accessToken: string,
model_id: string,
model_id: string
) => {
console.log(`model_id in model delete call: ${model_id}`)
console.log(`model_id in model delete call: ${model_id}`);
try {
const url = proxyBaseUrl ? `${proxyBaseUrl}/model/delete` : `/model/delete`;
const response = await fetch(url, {
@ -72,7 +76,7 @@ export const modelDeleteCall = async (
"Content-Type": "application/json",
},
body: JSON.stringify({
"id": model_id,
id: model_id,
}),
});
@ -91,7 +95,7 @@ export const modelDeleteCall = async (
console.error("Failed to create key:", error);
throw error;
}
}
};
export const keyCreateCall = async (
accessToken: string,
@ -280,15 +284,14 @@ export const teamDeleteCall = async (accessToken: String, teamID: String) => {
console.error("Failed to delete key:", error);
throw error;
}
}
};
export const userInfoCall = async (
accessToken: String,
userID: String | null,
userRole: String,
viewAll: Boolean = false,
page: number | null,
page: number | null,
page_size: number | null
) => {
try {
@ -300,7 +303,7 @@ export const userInfoCall = async (
url = `${url}?user_id=${userID}`;
}
console.log("in userInfoCall viewAll=", viewAll);
if (viewAll && page_size && (page != null) && (page != undefined)) {
if (viewAll && page_size && page != null && page != undefined) {
url = `${url}?view_all=true&page=${page}&page_size=${page_size}`;
}
//message.info("Requesting user data");
@ -329,10 +332,9 @@ export const userInfoCall = async (
}
};
export const teamInfoCall = async (
accessToken: String,
teamID: String | null,
teamID: String | null
) => {
try {
let url = proxyBaseUrl ? `${proxyBaseUrl}/team/info` : `/team/info`;
@ -364,10 +366,7 @@ export const teamInfoCall = async (
}
};
export const getTotalSpendCall = async (
accessToken: String,
) => {
export const getTotalSpendCall = async (accessToken: String) => {
/**
* Get all models on proxy
*/
@ -435,11 +434,10 @@ export const modelInfoCall = async (
}
};
export const modelMetricsCall = async (
accessToken: String,
userID: String,
userRole: String,
userRole: String,
modelGroup: String | null,
startTime: String | undefined,
endTime: String | undefined
@ -450,7 +448,7 @@ export const modelMetricsCall = async (
try {
let url = proxyBaseUrl ? `${proxyBaseUrl}/model/metrics` : `/model/metrics`;
if (modelGroup) {
url = `${url}?_selected_model_group=${modelGroup}&startTime=${startTime}&endTime=${endTime}`
url = `${url}?_selected_model_group=${modelGroup}&startTime=${startTime}&endTime=${endTime}`;
}
// message.info("Requesting model data");
const response = await fetch(url, {
@ -476,12 +474,10 @@ export const modelMetricsCall = async (
}
};
export const modelMetricsSlowResponsesCall = async (
accessToken: String,
userID: String,
userRole: String,
userRole: String,
modelGroup: String | null,
startTime: String | undefined,
endTime: String | undefined
@ -490,11 +486,13 @@ export const modelMetricsSlowResponsesCall = async (
* Get all models on proxy
*/
try {
let url = proxyBaseUrl ? `${proxyBaseUrl}/model/metrics/slow_responses` : `/model/metrics/slow_responses`;
let url = proxyBaseUrl
? `${proxyBaseUrl}/model/metrics/slow_responses`
: `/model/metrics/slow_responses`;
if (modelGroup) {
url = `${url}?_selected_model_group=${modelGroup}&startTime=${startTime}&endTime=${endTime}`
url = `${url}?_selected_model_group=${modelGroup}&startTime=${startTime}&endTime=${endTime}`;
}
// message.info("Requesting model data");
const response = await fetch(url, {
method: "GET",
@ -519,11 +517,10 @@ export const modelMetricsSlowResponsesCall = async (
}
};
export const modelExceptionsCall = async (
accessToken: String,
userID: String,
userRole: String,
userRole: String,
modelGroup: String | null,
startTime: String | undefined,
endTime: String | undefined
@ -532,10 +529,12 @@ export const modelExceptionsCall = async (
* Get all models on proxy
*/
try {
let url = proxyBaseUrl ? `${proxyBaseUrl}/model/metrics/exceptions` : `/model/metrics/exceptions`;
let url = proxyBaseUrl
? `${proxyBaseUrl}/model/metrics/exceptions`
: `/model/metrics/exceptions`;
if (modelGroup) {
url = `${url}?_selected_model_group=${modelGroup}&startTime=${startTime}&endTime=${endTime}`
url = `${url}?_selected_model_group=${modelGroup}&startTime=${startTime}&endTime=${endTime}`;
}
const response = await fetch(url, {
method: "GET",
@ -560,7 +559,6 @@ export const modelExceptionsCall = async (
}
};
export const modelAvailableCall = async (
accessToken: String,
userID: String,
@ -625,7 +623,6 @@ export const keySpendLogsCall = async (accessToken: String, token: String) => {
}
};
export const teamSpendLogsCall = async (accessToken: String) => {
try {
const url = proxyBaseUrl
@ -654,19 +651,18 @@ export const teamSpendLogsCall = async (accessToken: String) => {
}
};
export const tagsSpendLogsCall = async (
accessToken: String,
startTime: String | undefined,
endTime: String | undefined
) => {
accessToken: String,
startTime: String | undefined,
endTime: String | undefined
) => {
try {
let url = proxyBaseUrl
? `${proxyBaseUrl}/global/spend/tags`
: `/global/spend/tags`;
if (startTime && endTime) {
url = `${url}?start_date=${startTime}&end_date=${endTime}`
url = `${url}?start_date=${startTime}&end_date=${endTime}`;
}
console.log("in tagsSpendLogsCall:", url);
@ -692,7 +688,6 @@ export const tagsSpendLogsCall = async (
}
};
export const userSpendLogsCall = async (
accessToken: String,
token: String,
@ -806,11 +801,15 @@ export const adminTopEndUsersCall = async (
let body = "";
if (keyToken) {
body = JSON.stringify({ api_key: keyToken, startTime: startTime, endTime: endTime });
body = JSON.stringify({
api_key: keyToken,
startTime: startTime,
endTime: endTime,
});
} else {
body = JSON.stringify({ startTime: startTime, endTime: endTime });
}
//message.info("Making top end users request");
// Define requestOptions with body as an optional property
@ -1079,7 +1078,6 @@ export const teamCreateCall = async (
}
};
export const keyUpdateCall = async (
accessToken: string,
formValues: Record<string, any> // Assuming formValues is an object
@ -1240,7 +1238,7 @@ export const userUpdateUserCall = async (
console.log("Form Values in userUpdateUserCall:", formValues); // Log the form values before making the API call
const url = proxyBaseUrl ? `${proxyBaseUrl}/user/update` : `/user/update`;
let response_body = {...formValues};
let response_body = { ...formValues };
if (userRole !== null) {
response_body["user_role"] = userRole;
}
@ -1333,7 +1331,7 @@ export const slackBudgetAlertsHealthCheck = async (accessToken: String) => {
// throw error with message
throw new Error(errorData);
}
const data = await response.json();
message.success("Test Slack Alert worked - check your Slack!");
console.log("Service Health Response:", data);
@ -1347,9 +1345,10 @@ export const slackBudgetAlertsHealthCheck = async (accessToken: String) => {
}
};
export const serviceHealthCheck= async (accessToken: String, service: String) => {
export const serviceHealthCheck = async (
accessToken: String,
service: String
) => {
try {
let url = proxyBaseUrl
? `${proxyBaseUrl}/health/services?service=${service}`
@ -1371,9 +1370,11 @@ export const serviceHealthCheck= async (accessToken: String, service: String) =>
// throw error with message
throw new Error(errorData);
}
const data = await response.json();
message.success(`Test request to ${service} made - check logs/alerts on ${service} to verify`);
message.success(
`Test request to ${service} made - check logs/alerts on ${service} to verify`
);
// You can add additional logic here based on the response if needed
return data;
} catch (error) {
@ -1382,9 +1383,6 @@ export const serviceHealthCheck= async (accessToken: String, service: String) =>
}
};
export const getCallbacksCall = async (
accessToken: String,
userID: String,
@ -1394,7 +1392,9 @@ export const getCallbacksCall = async (
* Get all the models user has access to
*/
try {
let url = proxyBaseUrl ? `${proxyBaseUrl}/get/config/callbacks` : `/get/config/callbacks`;
let url = proxyBaseUrl
? `${proxyBaseUrl}/get/config/callbacks`
: `/get/config/callbacks`;
//message.info("Requesting model data");
const response = await fetch(url, {
@ -1421,11 +1421,117 @@ export const getCallbacksCall = async (
}
};
export const getGeneralSettingsCall = async (accessToken: String) => {
try {
let url = proxyBaseUrl
? `${proxyBaseUrl}/config/list?config_type=general_settings`
: `/config/list?config_type=general_settings`;
//message.info("Requesting model data");
const response = await fetch(url, {
method: "GET",
headers: {
Authorization: `Bearer ${accessToken}`,
"Content-Type": "application/json",
},
});
if (!response.ok) {
const errorData = await response.text();
message.error(errorData, 10);
throw new Error("Network response was not ok");
}
const data = await response.json();
//message.info("Received model data");
return data;
// Handle success - you might want to update some state or UI based on the created key
} catch (error) {
console.error("Failed to get callbacks:", error);
throw error;
}
};
export const updateConfigFieldSetting = async (
accessToken: String,
fieldName: string,
fieldValue: any
) => {
try {
let url = proxyBaseUrl
? `${proxyBaseUrl}/config/field/update`
: `/config/field/update`;
let formData = {
field_name: fieldName,
field_value: fieldValue,
config_type: "general_settings",
};
//message.info("Requesting model data");
const response = await fetch(url, {
method: "POST",
headers: {
Authorization: `Bearer ${accessToken}`,
"Content-Type": "application/json",
},
body: JSON.stringify(formData),
});
if (!response.ok) {
const errorData = await response.text();
message.error(errorData, 10);
throw new Error("Network response was not ok");
}
const data = await response.json();
//message.info("Received model data");
message.success("Successfully updated value!");
return data;
// Handle success - you might want to update some state or UI based on the created key
} catch (error) {
console.error("Failed to set callbacks:", error);
throw error;
}
};
export const deleteConfigFieldSetting = async (
accessToken: String,
fieldName: String
) => {
try {
let url = proxyBaseUrl
? `${proxyBaseUrl}/config/field/delete`
: `/config/field/delete`;
let formData = {
field_name: fieldName,
config_type: "general_settings",
};
//message.info("Requesting model data");
const response = await fetch(url, {
method: "POST",
headers: {
Authorization: `Bearer ${accessToken}`,
"Content-Type": "application/json",
},
body: JSON.stringify(formData),
});
if (!response.ok) {
const errorData = await response.text();
message.error(errorData, 10);
throw new Error("Network response was not ok");
}
const data = await response.json();
message.success("Field reset on proxy");
return data;
// Handle success - you might want to update some state or UI based on the created key
} catch (error) {
console.error("Failed to get callbacks:", error);
throw error;
}
};
export const setCallbacksCall = async (
accessToken: String,
formValues: Record<string, any>
@ -1464,9 +1570,7 @@ export const setCallbacksCall = async (
}
};
export const healthCheckCall = async (
accessToken: String,
) => {
export const healthCheckCall = async (accessToken: String) => {
/**
* Get all the models user has access to
*/
@ -1497,6 +1601,3 @@ export const healthCheckCall = async (
throw error;
}
};