@acarmisc/backstage-plugin-litellm 0.44.0 → 0.45.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.esm.js CHANGED
@@ -5166,7 +5166,7 @@ var init_TeamUsage = __esm({
5166
5166
  }) })
5167
5167
  ] }) });
5168
5168
  };
5169
- TeamCard = ({ team, usage, usageLoading, memberUsage, memberUsageLoading, keyUsage, keyUsageLoading, canManage, onEditTeam, canManageMembers, onManageMembers, onExpand, vectorStores, mcpServers }) => {
5169
+ TeamCard = ({ team, usage, usageLoading, memberUsage, memberUsageLoading, memberUsageFailed, keyUsage, keyUsageLoading, keyUsageFailed, canManage, onEditTeam, canManageMembers, onManageMembers, onExpand, vectorStores, mcpServers }) => {
5170
5170
  const [expanded, setExpanded] = useState9(false);
5171
5171
  const chart = useChartTheme();
5172
5172
  const handleExpandChange = (newExpanded) => {
@@ -5365,13 +5365,17 @@ var init_TeamUsage = __esm({
5365
5365
  renderNamedTags("Knowledge bases", team.object_permission?.vector_stores, vectorStores),
5366
5366
  renderNamedTags("MCP servers", team.object_permission?.mcp_servers, mcpServers),
5367
5367
  renderDailySpendSection(),
5368
- (memberUsageLoading || memberUsage) && /* @__PURE__ */ jsxs14(Box14, { mb: 2.5, children: [
5368
+ (memberUsageLoading || memberUsage || memberUsageFailed) && /* @__PURE__ */ jsxs14(Box14, { mb: 2.5, children: [
5369
5369
  sectionLabel("Usage by member"),
5370
- memberUsage ? /* @__PURE__ */ jsx15(MemberUsageTable, { usage: memberUsage }) : /* @__PURE__ */ jsx15(Box14, { display: "flex", justifyContent: "center", py: 2, children: /* @__PURE__ */ jsx15(CircularProgress4, { size: 22 }) })
5370
+ memberUsage && /* @__PURE__ */ jsx15(MemberUsageTable, { usage: memberUsage }),
5371
+ !memberUsage && memberUsageFailed && /* @__PURE__ */ jsx15(Typography12, { variant: "caption", color: "text.secondary", children: "Could not load per-member usage" }),
5372
+ !memberUsage && !memberUsageFailed && /* @__PURE__ */ jsx15(Box14, { display: "flex", justifyContent: "center", py: 2, children: /* @__PURE__ */ jsx15(CircularProgress4, { size: 22 }) })
5371
5373
  ] }),
5372
- (keyUsageLoading || keyUsage) && /* @__PURE__ */ jsxs14(Box14, { mb: 2.5, children: [
5374
+ (keyUsageLoading || keyUsage || keyUsageFailed) && /* @__PURE__ */ jsxs14(Box14, { mb: 2.5, children: [
5373
5375
  sectionLabel("Keys by member"),
5374
- keyUsage ? /* @__PURE__ */ jsx15(TeamKeyUsageTable, { usage: keyUsage }) : /* @__PURE__ */ jsx15(Box14, { display: "flex", justifyContent: "center", py: 2, children: /* @__PURE__ */ jsx15(CircularProgress4, { size: 22 }) })
5376
+ keyUsage && /* @__PURE__ */ jsx15(TeamKeyUsageTable, { usage: keyUsage }),
5377
+ !keyUsage && keyUsageFailed && /* @__PURE__ */ jsx15(Typography12, { variant: "caption", color: "text.secondary", children: "Could not load per-key usage" }),
5378
+ !keyUsage && !keyUsageFailed && /* @__PURE__ */ jsx15(Box14, { display: "flex", justifyContent: "center", py: 2, children: /* @__PURE__ */ jsx15(CircularProgress4, { size: 22 }) })
5375
5379
  ] }),
5376
5380
  /* @__PURE__ */ jsxs14(Box14, { children: [
5377
5381
  sectionLabel("Members"),
@@ -5431,6 +5435,8 @@ var init_TeamUsage = __esm({
5431
5435
  getTeamMemberUsageLoading,
5432
5436
  getTeamKeyUsage,
5433
5437
  getTeamKeyUsageLoading,
5438
+ getTeamMemberUsageFailed,
5439
+ getTeamKeyUsageFailed,
5434
5440
  canManage,
5435
5441
  onEditTeam,
5436
5442
  canCreate,
@@ -5496,6 +5502,8 @@ var init_TeamUsage = __esm({
5496
5502
  memberUsageLoading: getTeamMemberUsageLoading?.(team.team_id) ?? false,
5497
5503
  keyUsage: getTeamKeyUsage?.(team.team_id) ?? null,
5498
5504
  keyUsageLoading: getTeamKeyUsageLoading?.(team.team_id) ?? false,
5505
+ memberUsageFailed: getTeamMemberUsageFailed?.(team.team_id) ?? false,
5506
+ keyUsageFailed: getTeamKeyUsageFailed?.(team.team_id) ?? false,
5499
5507
  canManage,
5500
5508
  onEditTeam,
5501
5509
  canManageMembers: canManageMembers?.(team),
@@ -6344,7 +6352,7 @@ function initDateRange() {
6344
6352
  else start.setDate(start.getDate() - 7);
6345
6353
  return { start, end };
6346
6354
  }
6347
- var PERIOD_LS_KEY2, PAGE_TABS, isPageTab, LiteLLMPage;
6355
+ var PERIOD_LS_KEY2, PAGE_TABS, isPageTab, isRefusal, LiteLLMPage;
6348
6356
  var init_LiteLLMPage = __esm({
6349
6357
  "src/components/LiteLLMPage.tsx"() {
6350
6358
  "use strict";
@@ -6365,6 +6373,7 @@ var init_LiteLLMPage = __esm({
6365
6373
  PERIOD_LS_KEY2 = "litellm_usage_period";
6366
6374
  PAGE_TABS = ["overview", "keys", "teams", "models", "insights"];
6367
6375
  isPageTab = (v) => !!v && PAGE_TABS.includes(v);
6376
+ isRefusal = (err) => err instanceof ApiError && (err.status === 403 || err.status === 404);
6368
6377
  LiteLLMPage = () => {
6369
6378
  const api = useApi4(liteLlmApiRef);
6370
6379
  const alertApi = useApi4(alertApiRef2);
@@ -6450,6 +6459,8 @@ var init_LiteLLMPage = __esm({
6450
6459
  const [memberUsageLoading, setMemberUsageLoading] = useState11({});
6451
6460
  const [keyUsageCache, setKeyUsageCache] = useState11({});
6452
6461
  const [keyUsageLoading, setKeyUsageLoading] = useState11({});
6462
+ const [memberUsageFailed, setMemberUsageFailed] = useState11({});
6463
+ const [keyUsageFailed, setKeyUsageFailed] = useState11({});
6453
6464
  const { value: userInfo, loading: userLoading, error: userError } = useAsync(
6454
6465
  () => api.getUserInfo(),
6455
6466
  [api]
@@ -6518,6 +6529,8 @@ var init_LiteLLMPage = __esm({
6518
6529
  setMemberUsageLoading({});
6519
6530
  setKeyUsageCache({});
6520
6531
  setKeyUsageLoading({});
6532
+ setMemberUsageFailed({});
6533
+ setKeyUsageFailed({});
6521
6534
  }, [setDateRange, setCurrentPreset]);
6522
6535
  const loadTeamUsage = useCallback4(async (teamId) => {
6523
6536
  if (teamUsageCache[teamId] !== void 0 || teamUsageLoading[teamId]) return;
@@ -6541,8 +6554,9 @@ var init_LiteLLMPage = __esm({
6541
6554
  const endDate = toLocalDay(dateRange.end);
6542
6555
  const data = await api.getTeamMemberUsage(teamId, startDate, endDate);
6543
6556
  setMemberUsageCache((prev) => ({ ...prev, [teamId]: data }));
6544
- } catch {
6557
+ } catch (err) {
6545
6558
  setMemberUsageCache((prev) => ({ ...prev, [teamId]: null }));
6559
+ setMemberUsageFailed((prev) => ({ ...prev, [teamId]: !isRefusal(err) }));
6546
6560
  } finally {
6547
6561
  setMemberUsageLoading((prev) => ({ ...prev, [teamId]: false }));
6548
6562
  }
@@ -6555,8 +6569,9 @@ var init_LiteLLMPage = __esm({
6555
6569
  const endDate = toLocalDay(dateRange.end);
6556
6570
  const data = await api.getTeamKeyUsage(teamId, startDate, endDate);
6557
6571
  setKeyUsageCache((prev) => ({ ...prev, [teamId]: data }));
6558
- } catch {
6572
+ } catch (err) {
6559
6573
  setKeyUsageCache((prev) => ({ ...prev, [teamId]: null }));
6574
+ setKeyUsageFailed((prev) => ({ ...prev, [teamId]: !isRefusal(err) }));
6560
6575
  } finally {
6561
6576
  setKeyUsageLoading((prev) => ({ ...prev, [teamId]: false }));
6562
6577
  }
@@ -6860,6 +6875,8 @@ var init_LiteLLMPage = __esm({
6860
6875
  getTeamMemberUsageLoading: (teamId) => memberUsageLoading[teamId] ?? false,
6861
6876
  getTeamKeyUsage: (teamId) => keyUsageCache[teamId] ?? null,
6862
6877
  getTeamKeyUsageLoading: (teamId) => keyUsageLoading[teamId] ?? false,
6878
+ getTeamMemberUsageFailed: (teamId) => memberUsageFailed[teamId] ?? false,
6879
+ getTeamKeyUsageFailed: (teamId) => keyUsageFailed[teamId] ?? false,
6863
6880
  canManage: teamMgmtEnabled && canManageTeam && !readOnly,
6864
6881
  onEditTeam: (t) => setManageTeam({ mode: "edit", team: t }),
6865
6882
  canCreate: teamMgmtEnabled && canCreateTeam && !readOnly,