forked from phoenix/litellm-mirror
(feat) show num requests, latency
This commit is contained in:
parent
3a61df9995
commit
5ce08a38c9
2 changed files with 56 additions and 4 deletions
|
@ -11,7 +11,8 @@ import {
|
||||||
Metric,
|
Metric,
|
||||||
Grid,
|
Grid,
|
||||||
} from "@tremor/react";
|
} from "@tremor/react";
|
||||||
import { modelInfoCall, userGetRequesedtModelsCall } from "./networking";
|
import { modelInfoCall, userGetRequesedtModelsCall, modelMetricsCall } from "./networking";
|
||||||
|
import { BarChart } from "@tremor/react";
|
||||||
import { Badge, BadgeDelta, Button } from "@tremor/react";
|
import { Badge, BadgeDelta, Button } from "@tremor/react";
|
||||||
import RequestAccess from "./request_model_access";
|
import RequestAccess from "./request_model_access";
|
||||||
import { Typography } from "antd";
|
import { Typography } from "antd";
|
||||||
|
@ -30,6 +31,7 @@ const ModelDashboard: React.FC<ModelDashboardProps> = ({
|
||||||
userID,
|
userID,
|
||||||
}) => {
|
}) => {
|
||||||
const [modelData, setModelData] = useState<any>({ data: [] });
|
const [modelData, setModelData] = useState<any>({ data: [] });
|
||||||
|
const [modelMetrics, setModelMetrics] = useState<any[]>([]);
|
||||||
const [pendingRequests, setPendingRequests] = useState<any[]>([]);
|
const [pendingRequests, setPendingRequests] = useState<any[]>([]);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
|
@ -47,6 +49,15 @@ const ModelDashboard: React.FC<ModelDashboardProps> = ({
|
||||||
console.log("Model data response:", modelDataResponse.data);
|
console.log("Model data response:", modelDataResponse.data);
|
||||||
setModelData(modelDataResponse);
|
setModelData(modelDataResponse);
|
||||||
|
|
||||||
|
const modelMetricsResponse = await modelMetricsCall(
|
||||||
|
accessToken,
|
||||||
|
userID,
|
||||||
|
userRole
|
||||||
|
);
|
||||||
|
|
||||||
|
console.log("Model metrics response:", modelMetricsResponse);
|
||||||
|
setModelMetrics(modelMetricsResponse);
|
||||||
|
|
||||||
// if userRole is Admin, show the pending requests
|
// if userRole is Admin, show the pending requests
|
||||||
if (userRole === "Admin" && accessToken) {
|
if (userRole === "Admin" && accessToken) {
|
||||||
const user_requests = await userGetRequesedtModelsCall(accessToken);
|
const user_requests = await userGetRequesedtModelsCall(accessToken);
|
||||||
|
@ -197,9 +208,15 @@ const ModelDashboard: React.FC<ModelDashboardProps> = ({
|
||||||
</Table>
|
</Table>
|
||||||
</Card>
|
</Card>
|
||||||
<Card>
|
<Card>
|
||||||
<Title>Model Statistics</Title>
|
<Title>Model Statistics (Number Requests, Latency)</Title>
|
||||||
|
<BarChart
|
||||||
|
data={modelMetrics}
|
||||||
|
index="model"
|
||||||
|
categories={["num_requests", "avg_latency_seconds"]}
|
||||||
|
colors={["blue", "red"]}
|
||||||
|
yAxisWidth={100}
|
||||||
|
tickGap={5}
|
||||||
|
/>
|
||||||
</Card>
|
</Card>
|
||||||
{/* {userRole === "Admin" &&
|
{/* {userRole === "Admin" &&
|
||||||
pendingRequests &&
|
pendingRequests &&
|
||||||
|
|
|
@ -242,6 +242,41 @@ export const modelInfoCall = async (
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
export const modelMetricsCall = async (
|
||||||
|
accessToken: String,
|
||||||
|
userID: String,
|
||||||
|
userRole: String
|
||||||
|
) => {
|
||||||
|
/**
|
||||||
|
* Get all models on proxy
|
||||||
|
*/
|
||||||
|
try {
|
||||||
|
let url = proxyBaseUrl ? `${proxyBaseUrl}/model/metrics` : `/model/metrics`;
|
||||||
|
// 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);
|
||||||
|
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