@acarmisc/backstage-plugin-litellm 0.41.0 → 0.42.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/components/KeysTable.d.ts +3 -1
- package/dist/components/TeamUsage.d.ts +5 -1
- package/dist/index.cjs.js +32 -13
- package/dist/index.cjs.js.map +2 -2
- package/dist/index.esm.js +32 -13
- package/dist/index.esm.js.map +2 -2
- package/package.json +1 -1
package/dist/index.esm.js
CHANGED
|
@@ -1762,7 +1762,8 @@ var init_KeysTable = __esm({
|
|
|
1762
1762
|
onDeleteKey,
|
|
1763
1763
|
onPruneExpiredKeys,
|
|
1764
1764
|
filter,
|
|
1765
|
-
onClearFilter
|
|
1765
|
+
onClearFilter,
|
|
1766
|
+
teams
|
|
1766
1767
|
}) => {
|
|
1767
1768
|
const managePermission = usePermission({ permission: litellmKeyManagePermission });
|
|
1768
1769
|
const revokePermission = usePermission({ permission: litellmKeyRevokePermission });
|
|
@@ -1790,9 +1791,14 @@ var init_KeysTable = __esm({
|
|
|
1790
1791
|
setSortDirection("asc");
|
|
1791
1792
|
}
|
|
1792
1793
|
};
|
|
1794
|
+
const teamNames = useMemo2(
|
|
1795
|
+
() => new Map((teams ?? []).map((t) => [t.team_id, t.team_alias || t.team_id])),
|
|
1796
|
+
[teams]
|
|
1797
|
+
);
|
|
1798
|
+
const teamLabel = (id) => teamNames.get(id) ?? id;
|
|
1793
1799
|
const teamIds = useMemo2(
|
|
1794
|
-
() => [...new Set(keys.map((k) => k.team_id).filter((t) => !!t))].sort(),
|
|
1795
|
-
[keys]
|
|
1800
|
+
() => [...new Set(keys.map((k) => k.team_id).filter((t) => !!t))].sort((a, b) => (teamNames.get(a) ?? a).localeCompare(teamNames.get(b) ?? b)),
|
|
1801
|
+
[keys, teamNames]
|
|
1796
1802
|
);
|
|
1797
1803
|
const filteredKeys = useMemo2(() => {
|
|
1798
1804
|
let result = keys;
|
|
@@ -1916,7 +1922,7 @@ var init_KeysTable = __esm({
|
|
|
1916
1922
|
/* @__PURE__ */ jsx8(Typography5, { variant: "body2", children: key.key_alias || "\u2014" }),
|
|
1917
1923
|
key.blocked && /* @__PURE__ */ jsx8(StatusPill, { label: "Blocked", tone: "danger" })
|
|
1918
1924
|
] }) }),
|
|
1919
|
-
/* @__PURE__ */ jsx8(TableCell, { children: /* @__PURE__ */ jsx8(Typography5, { variant: "body2", color: "text.secondary", children: key.team_id
|
|
1925
|
+
/* @__PURE__ */ jsx8(TableCell, { children: /* @__PURE__ */ jsx8(Typography5, { variant: "body2", color: "text.secondary", children: key.team_id ? teamLabel(key.team_id) : "\u2014" }) }),
|
|
1920
1926
|
/* @__PURE__ */ jsx8(TableCell, { children: /* @__PURE__ */ jsxs7(Box7, { display: "flex", alignItems: "center", gap: 0.5, children: [
|
|
1921
1927
|
/* @__PURE__ */ jsx8(
|
|
1922
1928
|
Typography5,
|
|
@@ -2037,7 +2043,7 @@ var init_KeysTable = __esm({
|
|
|
2037
2043
|
sx: { minWidth: 160 },
|
|
2038
2044
|
children: [
|
|
2039
2045
|
/* @__PURE__ */ jsx8(MenuItem, { value: "", children: "All teams" }),
|
|
2040
|
-
teamIds.map((id) => /* @__PURE__ */ jsx8(MenuItem, { value: id, children: id }, id))
|
|
2046
|
+
teamIds.map((id) => /* @__PURE__ */ jsx8(MenuItem, { value: id, children: teamLabel(id) }, id))
|
|
2041
2047
|
]
|
|
2042
2048
|
}
|
|
2043
2049
|
),
|
|
@@ -5108,7 +5114,7 @@ var init_TeamUsage = __esm({
|
|
|
5108
5114
|
}) })
|
|
5109
5115
|
] }) });
|
|
5110
5116
|
};
|
|
5111
|
-
TeamCard = ({ team, usage, usageLoading, memberUsage, memberUsageLoading, canManage, onEditTeam, canManageMembers, onManageMembers, onExpand }) => {
|
|
5117
|
+
TeamCard = ({ team, usage, usageLoading, memberUsage, memberUsageLoading, canManage, onEditTeam, canManageMembers, onManageMembers, onExpand, vectorStores, mcpServers }) => {
|
|
5112
5118
|
const [expanded, setExpanded] = useState9(false);
|
|
5113
5119
|
const chart = useChartTheme();
|
|
5114
5120
|
const handleExpandChange = (newExpanded) => {
|
|
@@ -5175,6 +5181,10 @@ var init_TeamUsage = __esm({
|
|
|
5175
5181
|
children: label
|
|
5176
5182
|
}
|
|
5177
5183
|
);
|
|
5184
|
+
const renderNamedTags = (label, ids, items) => /* @__PURE__ */ jsxs14(Box14, { mb: 2.5, children: [
|
|
5185
|
+
sectionLabel(label),
|
|
5186
|
+
ids?.length ? /* @__PURE__ */ jsx15(Box14, { display: "flex", gap: 0.5, flexWrap: "wrap", children: ids.map((id) => /* @__PURE__ */ jsx15(TagChip, { label: items?.find((i) => i.id === id)?.name ?? id, title: id }, id)) }) : /* @__PURE__ */ jsx15(Typography12, { variant: "body2", color: "text.secondary", children: "None configured" })
|
|
5187
|
+
] });
|
|
5178
5188
|
return /* @__PURE__ */ jsxs14(Paper8, { variant: "outlined", sx: { borderRadius: 2, p: 2.5 }, children: [
|
|
5179
5189
|
/* @__PURE__ */ jsxs14(Box14, { display: "flex", alignItems: "center", gap: 1.5, children: [
|
|
5180
5190
|
/* @__PURE__ */ jsx15(
|
|
@@ -5300,6 +5310,8 @@ var init_TeamUsage = __esm({
|
|
|
5300
5310
|
sectionLabel("Models"),
|
|
5301
5311
|
team.models?.length ? /* @__PURE__ */ jsx15(Box14, { display: "flex", gap: 0.5, flexWrap: "wrap", children: team.models.map((m) => /* @__PURE__ */ jsx15(TagChip, { label: m, title: m }, m)) }) : /* @__PURE__ */ jsx15(Typography12, { variant: "body2", color: "text.secondary", children: "All models allowed" })
|
|
5302
5312
|
] }),
|
|
5313
|
+
renderNamedTags("Knowledge bases", team.object_permission?.vector_stores, vectorStores),
|
|
5314
|
+
renderNamedTags("MCP servers", team.object_permission?.mcp_servers, mcpServers),
|
|
5303
5315
|
renderDailySpendSection(),
|
|
5304
5316
|
(memberUsageLoading || memberUsage) && /* @__PURE__ */ jsxs14(Box14, { mb: 2.5, children: [
|
|
5305
5317
|
sectionLabel("Usage by member"),
|
|
@@ -5368,7 +5380,9 @@ var init_TeamUsage = __esm({
|
|
|
5368
5380
|
onTeamExpand,
|
|
5369
5381
|
canManageMembers,
|
|
5370
5382
|
onManageMembers,
|
|
5371
|
-
readOnly
|
|
5383
|
+
readOnly,
|
|
5384
|
+
vectorStores,
|
|
5385
|
+
mcpServers
|
|
5372
5386
|
}) => {
|
|
5373
5387
|
const readOnlyBadge = /* @__PURE__ */ jsx15(MuiTooltip, { title: "Teams and memberships are managed in your identity provider. Changes made here would be overwritten, so editing is disabled.", children: /* @__PURE__ */ jsxs14(
|
|
5374
5388
|
Box14,
|
|
@@ -5426,7 +5440,9 @@ var init_TeamUsage = __esm({
|
|
|
5426
5440
|
onEditTeam,
|
|
5427
5441
|
canManageMembers: canManageMembers?.(team),
|
|
5428
5442
|
onManageMembers,
|
|
5429
|
-
onExpand: onTeamExpand
|
|
5443
|
+
onExpand: onTeamExpand,
|
|
5444
|
+
vectorStores,
|
|
5445
|
+
mcpServers
|
|
5430
5446
|
},
|
|
5431
5447
|
team.team_id
|
|
5432
5448
|
)) })
|
|
@@ -6401,12 +6417,12 @@ var init_LiteLLMPage = __esm({
|
|
|
6401
6417
|
const teamMgmtEnabled = liteLlmConfig?.teamManagement?.enabled ?? false;
|
|
6402
6418
|
const objectPermsEnabled = liteLlmConfig?.teamManagement?.objectPermissionsEnabled ?? false;
|
|
6403
6419
|
const { value: vectorStores } = useAsync(
|
|
6404
|
-
|
|
6405
|
-
[api
|
|
6420
|
+
() => api.getVectorStores().catch(() => []),
|
|
6421
|
+
[api]
|
|
6406
6422
|
);
|
|
6407
6423
|
const { value: mcpServers } = useAsync(
|
|
6408
|
-
|
|
6409
|
-
[api
|
|
6424
|
+
() => api.getMcpServers().catch(() => []),
|
|
6425
|
+
[api]
|
|
6410
6426
|
);
|
|
6411
6427
|
const teams = useMemo9(() => {
|
|
6412
6428
|
if (!allTeams?.length) return [];
|
|
@@ -6732,7 +6748,8 @@ var init_LiteLLMPage = __esm({
|
|
|
6732
6748
|
onDeleteKey: handleDeleteKey,
|
|
6733
6749
|
onPruneExpiredKeys: handlePruneExpiredKeys,
|
|
6734
6750
|
filter,
|
|
6735
|
-
onClearFilter: clearFilter
|
|
6751
|
+
onClearFilter: clearFilter,
|
|
6752
|
+
teams: allTeams ?? []
|
|
6736
6753
|
}
|
|
6737
6754
|
);
|
|
6738
6755
|
})(),
|
|
@@ -6763,6 +6780,8 @@ var init_LiteLLMPage = __esm({
|
|
|
6763
6780
|
onEditTeam: (t) => setManageTeam({ mode: "edit", team: t }),
|
|
6764
6781
|
canCreate: teamMgmtEnabled && canCreateTeam && !readOnly,
|
|
6765
6782
|
onCreateTeam: () => setManageTeam({ mode: "create" }),
|
|
6783
|
+
vectorStores: vectorStores ?? [],
|
|
6784
|
+
mcpServers: mcpServers ?? [],
|
|
6766
6785
|
canManageMembers: (t) => teamMgmtEnabled && canManageMembers && isTeamMemberManager(t, userInfo?.user_id, memberManagerRoles, readOnly),
|
|
6767
6786
|
onManageMembers: (t) => setManageTeam({ mode: "members", team: t }),
|
|
6768
6787
|
readOnly,
|