mirror of
https://github.com/BerriAI/litellm.git
synced 2025-04-27 03:34:10 +00:00
feat ui - modelExceptionsCall
This commit is contained in:
parent
a2a8fef8f4
commit
ce1817380e
2 changed files with 65 additions and 1 deletions
|
@ -18,7 +18,7 @@ import {
|
||||||
} from "@tremor/react";
|
} from "@tremor/react";
|
||||||
import { TabPanel, TabPanels, TabGroup, TabList, Tab, TextInput, Icon } from "@tremor/react";
|
import { TabPanel, TabPanels, TabGroup, TabList, Tab, TextInput, Icon } from "@tremor/react";
|
||||||
import { Select, SelectItem, MultiSelect, MultiSelectItem } from "@tremor/react";
|
import { Select, SelectItem, MultiSelect, MultiSelectItem } from "@tremor/react";
|
||||||
import { modelInfoCall, userGetRequesedtModelsCall, modelCreateCall, Model, modelCostMap, modelDeleteCall, healthCheckCall, modelUpdateCall, modelMetricsCall } from "./networking";
|
import { modelInfoCall, userGetRequesedtModelsCall, modelCreateCall, Model, modelCostMap, modelDeleteCall, healthCheckCall, modelUpdateCall, modelMetricsCall, modelExceptionsCall } from "./networking";
|
||||||
import { BarChart } from "@tremor/react";
|
import { BarChart } from "@tremor/react";
|
||||||
import {
|
import {
|
||||||
Button as Button2,
|
Button as Button2,
|
||||||
|
@ -202,6 +202,8 @@ const ModelDashboard: React.FC<ModelDashboardProps> = ({
|
||||||
const [selectedModelGroup, setSelectedModelGroup] = useState<string | null>(null);
|
const [selectedModelGroup, setSelectedModelGroup] = useState<string | null>(null);
|
||||||
const [modelLatencyMetrics, setModelLatencyMetrics] = useState<any[]>([]);
|
const [modelLatencyMetrics, setModelLatencyMetrics] = useState<any[]>([]);
|
||||||
const [modelMetrics, setModelMetrics] = useState<any[]>([]);
|
const [modelMetrics, setModelMetrics] = useState<any[]>([]);
|
||||||
|
const [modelExceptions, setModelExceptions] = useState<any[]>([]);
|
||||||
|
const [allExceptions, setAllExceptions] = useState<any[]>([]);
|
||||||
|
|
||||||
const EditModelModal: React.FC<EditModelModalProps> = ({ visible, onCancel, model, onSubmit }) => {
|
const EditModelModal: React.FC<EditModelModalProps> = ({ visible, onCancel, model, onSubmit }) => {
|
||||||
const [form] = Form.useForm();
|
const [form] = Form.useForm();
|
||||||
|
@ -461,6 +463,17 @@ const handleEditSubmit = async (formValues: Record<string, any>) => {
|
||||||
|
|
||||||
setModelMetrics(modelMetricsResponse);
|
setModelMetrics(modelMetricsResponse);
|
||||||
setModelLatencyMetrics(sortedByLatency);
|
setModelLatencyMetrics(sortedByLatency);
|
||||||
|
|
||||||
|
const modelExceptionsResponse = await modelExceptionsCall(
|
||||||
|
accessToken,
|
||||||
|
userID,
|
||||||
|
userRole,
|
||||||
|
null
|
||||||
|
)
|
||||||
|
console.log("Model exceptions response:", modelExceptionsResponse);
|
||||||
|
setModelExceptions(modelExceptionsResponse.data);
|
||||||
|
setAllExceptions(modelExceptionsResponse.exception_types);
|
||||||
|
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error("There was an error fetching the model data", error);
|
console.error("There was an error fetching the model data", error);
|
||||||
}
|
}
|
||||||
|
@ -1017,6 +1030,20 @@ const handleEditSubmit = async (formValues: Record<string, any>) => {
|
||||||
tickGap={5}
|
tickGap={5}
|
||||||
/>
|
/>
|
||||||
</Card>
|
</Card>
|
||||||
|
|
||||||
|
<Card className="mt-4">
|
||||||
|
<Title>Exceptions per Model</Title>
|
||||||
|
<BarChart
|
||||||
|
className="h-72"
|
||||||
|
data={modelExceptions}
|
||||||
|
index="model_group"
|
||||||
|
categories={allExceptions}
|
||||||
|
stack={true}
|
||||||
|
colors={['indigo-300', 'rose-200', '#ffcc33']}
|
||||||
|
yAxisWidth={30}
|
||||||
|
/>
|
||||||
|
|
||||||
|
</Card>
|
||||||
<Card className="mt-4">
|
<Card className="mt-4">
|
||||||
<Title>Latency Per Model</Title>
|
<Title>Latency Per Model</Title>
|
||||||
<BarChart
|
<BarChart
|
||||||
|
|
|
@ -474,6 +474,43 @@ export const modelMetricsCall = async (
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
export const modelExceptionsCall = async (
|
||||||
|
accessToken: String,
|
||||||
|
userID: String,
|
||||||
|
userRole: String,
|
||||||
|
modelGroup: String | null,
|
||||||
|
) => {
|
||||||
|
/**
|
||||||
|
* Get all models on proxy
|
||||||
|
*/
|
||||||
|
try {
|
||||||
|
let url = proxyBaseUrl ? `${proxyBaseUrl}/model/metrics/exceptions` : `/model/metrics/exceptions`;
|
||||||
|
|
||||||
|
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, 20);
|
||||||
|
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 create key:", error);
|
||||||
|
throw error;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
export const modelAvailableCall = async (
|
export const modelAvailableCall = async (
|
||||||
accessToken: String,
|
accessToken: String,
|
||||||
userID: String,
|
userID: String,
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue