@acarmisc/backstage-plugin-litellm 0.45.0 → 0.47.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.
@@ -1,11 +1,13 @@
1
1
  import { FC } from 'react';
2
2
  import { McpServerInfo, TeamInfo, TeamKeyUsage, TeamMemberUsage, UsageMetrics, VectorStoreInfo } from '../types';
3
3
  /**
4
- * Per-member usage for the period, sorted by spend. Dollars are replaced by
5
- * the share of team spend when the backend hides them.
4
+ * Per-member usage for the period as mini-cards, sorted by spend (the order
5
+ * the backend sends). Dollars are replaced by the share of team spend when the
6
+ * backend hides them.
6
7
  */
7
- export declare const MemberUsageTable: FC<{
8
+ export declare const MemberUsageCards: FC<{
8
9
  usage: TeamMemberUsage;
10
+ filterText?: string;
9
11
  }>;
10
12
  /**
11
13
  * A team's keys with the period's usage, for team leads. The backend never
@@ -13,6 +15,7 @@ export declare const MemberUsageTable: FC<{
13
15
  */
14
16
  export declare const TeamKeyUsageTable: FC<{
15
17
  usage: TeamKeyUsage;
18
+ filterText?: string;
16
19
  }>;
17
20
  interface TeamUsageProps {
18
21
  teams: TeamInfo[];
package/dist/index.cjs.js CHANGED
@@ -5060,7 +5060,7 @@ function budgetStatValue(hidden, budget) {
5060
5060
  if (budget > 0) return fmtUsd2(budget);
5061
5061
  return "Unlimited";
5062
5062
  }
5063
- var import_react10, import_Paper8, import_Box14, import_Typography12, import_Skeleton5, import_Divider3, import_Table4, import_TableBody4, import_TableCell4, import_TableHead4, import_TableRow4, import_TableContainer4, import_Collapse2, import_IconButton6, import_Button6, import_CircularProgress4, import_styles10, import_Tooltip5, import_icons_material7, import_recharts2, import_jsx_runtime15, fmtUsd2, monoSx, MemberUsageTable, TeamKeyUsageTable, TeamCard, TeamUsage;
5063
+ var import_react10, import_Paper8, import_Box14, import_Typography12, import_Skeleton5, import_Divider3, import_Table4, import_TableBody4, import_TableCell4, import_TableHead4, import_TableRow4, import_TableContainer4, import_Collapse2, import_IconButton6, import_Button6, import_TextField5, import_InputAdornment3, import_CircularProgress4, import_styles10, import_Tooltip5, import_icons_material7, import_recharts2, import_jsx_runtime15, fmtUsd2, monoSx, fmtShare, MemberUsageCards, TeamKeyUsageTable, TeamCard, TeamUsage;
5064
5064
  var init_TeamUsage = __esm({
5065
5065
  "src/components/TeamUsage.tsx"() {
5066
5066
  "use strict";
@@ -5079,6 +5079,8 @@ var init_TeamUsage = __esm({
5079
5079
  import_Collapse2 = __toESM(require("@mui/material/Collapse"));
5080
5080
  import_IconButton6 = __toESM(require("@mui/material/IconButton"));
5081
5081
  import_Button6 = __toESM(require("@mui/material/Button"));
5082
+ import_TextField5 = __toESM(require("@mui/material/TextField"));
5083
+ import_InputAdornment3 = __toESM(require("@mui/material/InputAdornment"));
5082
5084
  import_CircularProgress4 = __toESM(require("@mui/material/CircularProgress"));
5083
5085
  import_styles10 = require("@mui/material/styles");
5084
5086
  import_Tooltip5 = __toESM(require("@mui/material/Tooltip"));
@@ -5088,46 +5090,85 @@ var init_TeamUsage = __esm({
5088
5090
  import_jsx_runtime15 = require("react/jsx-runtime");
5089
5091
  fmtUsd2 = (n) => `$${(n ?? 0).toFixed(2)}`;
5090
5092
  monoSx = { fontFamily: "ui-monospace, SFMono-Regular, Menlo, monospace", fontSize: 11 };
5091
- MemberUsageTable = ({ usage }) => {
5093
+ fmtShare = (pct) => `${pct.toFixed(pct > 0 && pct < 1 ? 1 : 0)}%`;
5094
+ MemberUsageCards = ({ usage, filterText }) => {
5092
5095
  const hidden = usage.budget_hidden === true;
5093
5096
  if (!usage.members.length) {
5094
5097
  return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_Typography12.default, { variant: "body2", color: "text.secondary", children: "No members or activity in this period." });
5095
5098
  }
5096
- return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_TableContainer4.default, { component: import_Paper8.default, variant: "outlined", sx: { borderRadius: 1.5 }, children: /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(import_Table4.default, { size: "small", sx: dataTableSx, "aria-label": "Usage by member", children: [
5097
- /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_TableHead4.default, { children: /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(import_TableRow4.default, { children: [
5098
- /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_TableCell4.default, { children: "Member" }),
5099
- !hidden && /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_TableCell4.default, { align: "right", children: "Spend" }),
5100
- /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_TableCell4.default, { align: "right", children: "Share" }),
5101
- /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_TableCell4.default, { align: "right", children: "Tokens" }),
5102
- /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_TableCell4.default, { align: "right", children: "Requests" }),
5103
- /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_TableCell4.default, { align: "right", children: "Success" }),
5104
- /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_TableCell4.default, { align: "right", children: "Keys" })
5105
- ] }) }),
5106
- /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_TableBody4.default, { children: usage.members.map((m) => {
5107
- const name = m.display_name ?? m.user_email ?? m.user_id;
5108
- let sub = null;
5109
- if (m.display_name) sub = m.user_email ?? m.user_id;
5110
- else if (m.user_email && m.user_id !== m.user_email) sub = m.user_id;
5111
- return /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(import_TableRow4.default, { children: [
5112
- /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_TableCell4.default, { children: m.user_id === null ? /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_Tooltip5.default, { title: "Activity of keys that were deleted or have no owner", children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_Typography12.default, { variant: "body2", color: "text.secondary", sx: { fontStyle: "italic" }, children: "Unattributed" }) }) : /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(import_jsx_runtime15.Fragment, { children: [
5113
- /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_Typography12.default, { variant: "body2", children: name }),
5114
- sub && /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_Typography12.default, { variant: "caption", color: "text.secondary", sx: monoSx, children: sub })
5115
- ] }) }),
5116
- !hidden && /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_TableCell4.default, { align: "right", children: fmtUsd2(m.spend) }),
5117
- /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_TableCell4.default, { align: "right", children: `${m.spend_share_pct.toFixed(m.spend_share_pct > 0 && m.spend_share_pct < 1 ? 1 : 0)}%` }),
5118
- /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_TableCell4.default, { align: "right", children: fmtCompact(m.total_tokens) }),
5119
- /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_TableCell4.default, { align: "right", children: m.api_requests.toLocaleString() }),
5120
- /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_TableCell4.default, { align: "right", children: m.success_rate === null ? "\u2014" : `${m.success_rate.toFixed(0)}%` }),
5121
- /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_TableCell4.default, { align: "right", children: m.user_id === null ? "\u2014" : m.key_count })
5122
- ] }, m.user_id ?? "__unattributed");
5123
- }) })
5124
- ] }) });
5099
+ const query = (filterText ?? "").trim().toLowerCase();
5100
+ const matches = (m) => {
5101
+ if (!query) return true;
5102
+ const haystacks = m.user_id === null ? ["Unattributed"] : [m.display_name, m.user_email, m.user_id];
5103
+ return haystacks.some((h) => h && h.toLowerCase().includes(query));
5104
+ };
5105
+ const visible = usage.members.filter(matches);
5106
+ const people = usage.members.filter((m) => m.user_id !== null).length;
5107
+ return /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(import_Box14.default, { children: [
5108
+ !hidden && people > 0 && /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_Typography12.default, { variant: "caption", color: "text.secondary", sx: { display: "block", mb: 1 }, children: `Team spend ${fmtUsd2(usage.total_spend)} \xB7 avg ${fmtUsd2(usage.total_spend / people)} per member` }),
5109
+ visible.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_Typography12.default, { variant: "body2", color: "text.secondary", sx: { display: "block", py: 1 }, children: "No members match that filter." }) : /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
5110
+ import_Box14.default,
5111
+ {
5112
+ role: "list",
5113
+ "aria-label": "Usage by member",
5114
+ sx: { display: "grid", gap: 1.5, gridTemplateColumns: "repeat(auto-fill, minmax(230px, 1fr))" },
5115
+ children: visible.map((m) => {
5116
+ const name = m.display_name ?? m.user_email ?? m.user_id;
5117
+ let sub = null;
5118
+ if (m.display_name) sub = m.user_email ?? m.user_id;
5119
+ else if (m.user_email && m.user_id !== m.user_email) sub = m.user_id;
5120
+ const stats = [
5121
+ ["Tokens", fmtCompact(m.total_tokens)],
5122
+ ["Requests", m.api_requests.toLocaleString()],
5123
+ ["Success", m.success_rate === null ? "\u2014" : `${m.success_rate.toFixed(0)}%`],
5124
+ ["Keys", m.user_id === null ? "\u2014" : String(m.key_count)]
5125
+ ];
5126
+ return /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(
5127
+ import_Paper8.default,
5128
+ {
5129
+ role: "listitem",
5130
+ variant: "outlined",
5131
+ sx: { borderRadius: 1.5, p: 1.5, minWidth: 0 },
5132
+ children: [
5133
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(import_Box14.default, { display: "flex", justifyContent: "space-between", alignItems: "flex-start", gap: 1, children: [
5134
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_Box14.default, { minWidth: 0, children: m.user_id === null ? /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_Tooltip5.default, { title: "Activity of keys that were deleted or have no owner", children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_Typography12.default, { variant: "body2", color: "text.secondary", sx: { fontStyle: "italic" }, children: "Unattributed" }) }) : /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(import_jsx_runtime15.Fragment, { children: [
5135
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_Typography12.default, { variant: "body2", fontWeight: 600, noWrap: true, children: name }),
5136
+ sub && /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_Typography12.default, { variant: "caption", color: "text.secondary", noWrap: true, sx: { ...monoSx, display: "block" }, children: sub })
5137
+ ] }) }),
5138
+ m.role && /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(StatusPill, { label: m.role, tone: m.role === "admin" ? "accent" : "neutral", dot: false })
5139
+ ] }),
5140
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(import_Box14.default, { mt: 1.5, display: "flex", alignItems: "baseline", justifyContent: "space-between", children: [
5141
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_Typography12.default, { variant: "h6", component: "span", sx: { lineHeight: 1.2 }, children: hidden ? fmtShare(m.spend_share_pct) : fmtUsd2(m.spend) }),
5142
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_Typography12.default, { variant: "caption", color: "text.secondary", children: hidden ? "of team usage" : `${fmtShare(m.spend_share_pct)} of team` })
5143
+ ] }),
5144
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_Box14.default, { mt: 0.75, children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(Meter, { value: m.spend_share_pct, ariaLabel: `${name ?? "Unattributed"} share of team spend` }) }),
5145
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_Box14.default, { mt: 1.5, display: "grid", gridTemplateColumns: "repeat(4, 1fr)", gap: 0.5, children: stats.map(([label, value]) => /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(import_Box14.default, { children: [
5146
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_Typography12.default, { variant: "caption", color: "text.secondary", display: "block", children: label }),
5147
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_Typography12.default, { variant: "body2", children: value })
5148
+ ] }, label)) })
5149
+ ]
5150
+ },
5151
+ m.user_id ?? "__unattributed"
5152
+ );
5153
+ })
5154
+ }
5155
+ )
5156
+ ] });
5125
5157
  };
5126
- TeamKeyUsageTable = ({ usage }) => {
5158
+ TeamKeyUsageTable = ({ usage, filterText }) => {
5127
5159
  const hidden = usage.budget_hidden === true;
5128
5160
  if (!usage.keys.length) {
5129
5161
  return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_Typography12.default, { variant: "body2", color: "text.secondary", children: "This team has no keys." });
5130
5162
  }
5163
+ const query = (filterText ?? "").trim().toLowerCase();
5164
+ const visible = usage.keys.filter((k) => {
5165
+ if (!query) return true;
5166
+ const haystacks = [k.key_alias, k.key, k.user_email, k.user_id, k.display_name];
5167
+ return haystacks.some((h) => h && h.toLowerCase().includes(query));
5168
+ });
5169
+ if (visible.length === 0) {
5170
+ return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_Typography12.default, { variant: "body2", color: "text.secondary", sx: { display: "block", py: 1 }, children: "No keys match that filter." });
5171
+ }
5131
5172
  return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_TableContainer4.default, { component: import_Paper8.default, variant: "outlined", sx: { borderRadius: 1.5 }, children: /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(import_Table4.default, { size: "small", sx: dataTableSx, "aria-label": "Keys by member", children: [
5132
5173
  /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_TableHead4.default, { children: /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(import_TableRow4.default, { children: [
5133
5174
  /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_TableCell4.default, { children: "Key" }),
@@ -5139,7 +5180,7 @@ var init_TeamUsage = __esm({
5139
5180
  /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_TableCell4.default, { align: "right", children: "Tokens" }),
5140
5181
  /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_TableCell4.default, { align: "right", children: "Requests" })
5141
5182
  ] }) }),
5142
- /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_TableBody4.default, { children: usage.keys.map((k) => {
5183
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_TableBody4.default, { children: visible.map((k) => {
5143
5184
  const owner = k.display_name ?? k.user_email ?? k.user_id;
5144
5185
  return /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(import_TableRow4.default, { children: [
5145
5186
  /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(import_TableCell4.default, { children: [
@@ -5165,7 +5206,9 @@ var init_TeamUsage = __esm({
5165
5206
  };
5166
5207
  TeamCard = ({ team, usage, usageLoading, memberUsage, memberUsageLoading, memberUsageFailed, keyUsage, keyUsageLoading, keyUsageFailed, canManage, onEditTeam, canManageMembers, onManageMembers, onExpand, vectorStores, mcpServers }) => {
5167
5208
  const [expanded, setExpanded] = (0, import_react10.useState)(false);
5209
+ const [teamSearch, setTeamSearch] = (0, import_react10.useState)("");
5168
5210
  const chart = useChartTheme();
5211
+ const searchValue = teamSearch.trim() ? teamSearch : "";
5169
5212
  const handleExpandChange = (newExpanded) => {
5170
5213
  setExpanded(newExpanded);
5171
5214
  if (newExpanded && onExpand) {
@@ -5363,18 +5406,37 @@ var init_TeamUsage = __esm({
5363
5406
  renderNamedTags("MCP servers", team.object_permission?.mcp_servers, mcpServers),
5364
5407
  renderDailySpendSection(),
5365
5408
  (memberUsageLoading || memberUsage || memberUsageFailed) && /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(import_Box14.default, { mb: 2.5, children: [
5366
- sectionLabel("Usage by member"),
5367
- memberUsage && /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(MemberUsageTable, { usage: memberUsage }),
5409
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(import_Box14.default, { display: "flex", alignItems: "center", justifyContent: "space-between", gap: 1, mb: 1, children: [
5410
+ sectionLabel("Usage by member"),
5411
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
5412
+ import_TextField5.default,
5413
+ {
5414
+ size: "small",
5415
+ placeholder: "Filter members by name or email\u2026",
5416
+ value: teamSearch,
5417
+ onChange: (e) => setTeamSearch(e.target.value),
5418
+ sx: { width: { xs: "100%", sm: 260 } },
5419
+ InputProps: {
5420
+ startAdornment: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_InputAdornment3.default, { position: "start", children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_icons_material7.Search, { fontSize: "small", color: "disabled" }) }),
5421
+ endAdornment: searchValue ? /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_InputAdornment3.default, { position: "end", children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_IconButton6.default, { size: "small", onClick: () => setTeamSearch(""), "aria-label": "Clear member filter", children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_icons_material7.Close, { fontSize: "small" }) }) }) : void 0
5422
+ }
5423
+ }
5424
+ )
5425
+ ] }),
5426
+ memberUsage && /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(MemberUsageCards, { usage: memberUsage, filterText: searchValue }),
5368
5427
  !memberUsage && memberUsageFailed && /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_Typography12.default, { variant: "caption", color: "text.secondary", children: "Could not load per-member usage" }),
5369
5428
  !memberUsage && !memberUsageFailed && /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_Box14.default, { display: "flex", justifyContent: "center", py: 2, children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_CircularProgress4.default, { size: 22 }) })
5370
5429
  ] }),
5371
5430
  (keyUsageLoading || keyUsage || keyUsageFailed) && /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(import_Box14.default, { mb: 2.5, children: [
5372
- sectionLabel("Keys by member"),
5373
- keyUsage && /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(TeamKeyUsageTable, { usage: keyUsage }),
5431
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(import_Box14.default, { display: "flex", alignItems: "center", justifyContent: "space-between", gap: 1, mb: 1, children: [
5432
+ sectionLabel("Keys by member"),
5433
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_Typography12.default, { variant: "caption", color: "text.secondary", noWrap: true, children: "Filter member keys, owner or alias" })
5434
+ ] }),
5435
+ keyUsage && /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(TeamKeyUsageTable, { usage: keyUsage, filterText: searchValue }),
5374
5436
  !keyUsage && keyUsageFailed && /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_Typography12.default, { variant: "caption", color: "text.secondary", children: "Could not load per-key usage" }),
5375
5437
  !keyUsage && !keyUsageFailed && /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_Box14.default, { display: "flex", justifyContent: "center", py: 2, children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_CircularProgress4.default, { size: 22 }) })
5376
5438
  ] }),
5377
- /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(import_Box14.default, { children: [
5439
+ !memberUsage && /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(import_Box14.default, { children: [
5378
5440
  sectionLabel("Members"),
5379
5441
  team.members_with_roles?.length ? /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
5380
5442
  import_TableContainer4.default,
@@ -5535,7 +5597,7 @@ function fmtTokens(n) {
5535
5597
  if (n >= 1e3) return `${(n / 1e3).toFixed(0)}K`;
5536
5598
  return String(n);
5537
5599
  }
5538
- var import_react11, import_Box15, import_Table5, import_TableBody5, import_TableCell5, import_TableContainer5, import_TableHead5, import_TableRow5, import_TableSortLabel2, import_Typography13, import_MenuItem5, import_Select, import_FormControl, import_InputLabel, import_TextField5, import_InputAdornment3, import_icons_material8, import_ContentCopy, import_Tooltip6, import_Snackbar, import_Alert4, import_styles11, import_jsx_runtime16, ALL_PROXY_MODELS, ModelsTable;
5600
+ var import_react11, import_Box15, import_Table5, import_TableBody5, import_TableCell5, import_TableContainer5, import_TableHead5, import_TableRow5, import_TableSortLabel2, import_Typography13, import_MenuItem5, import_Select, import_FormControl, import_InputLabel, import_TextField6, import_InputAdornment4, import_icons_material8, import_ContentCopy, import_Tooltip6, import_Snackbar, import_Alert4, import_styles11, import_jsx_runtime16, ALL_PROXY_MODELS, ModelsTable;
5539
5601
  var init_ModelsTable = __esm({
5540
5602
  "src/components/ModelsTable.tsx"() {
5541
5603
  "use strict";
@@ -5553,8 +5615,8 @@ var init_ModelsTable = __esm({
5553
5615
  import_Select = __toESM(require("@mui/material/Select"));
5554
5616
  import_FormControl = __toESM(require("@mui/material/FormControl"));
5555
5617
  import_InputLabel = __toESM(require("@mui/material/InputLabel"));
5556
- import_TextField5 = __toESM(require("@mui/material/TextField"));
5557
- import_InputAdornment3 = __toESM(require("@mui/material/InputAdornment"));
5618
+ import_TextField6 = __toESM(require("@mui/material/TextField"));
5619
+ import_InputAdornment4 = __toESM(require("@mui/material/InputAdornment"));
5558
5620
  import_icons_material8 = require("@mui/icons-material");
5559
5621
  import_ContentCopy = __toESM(require("@mui/icons-material/ContentCopy"));
5560
5622
  import_Tooltip6 = __toESM(require("@mui/material/Tooltip"));
@@ -5672,7 +5734,7 @@ var init_ModelsTable = __esm({
5672
5734
  )
5673
5735
  ] }),
5674
5736
  /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
5675
- import_TextField5.default,
5737
+ import_TextField6.default,
5676
5738
  {
5677
5739
  label: "Filter Models",
5678
5740
  size: "small",
@@ -5681,7 +5743,7 @@ var init_ModelsTable = __esm({
5681
5743
  disabled: !selectedTeamId,
5682
5744
  sx: { minWidth: 240, mb: 2 },
5683
5745
  InputProps: {
5684
- startAdornment: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_InputAdornment3.default, { position: "start", children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_icons_material8.Search, { fontSize: "small" }) })
5746
+ startAdornment: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_InputAdornment4.default, { position: "start", children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_icons_material8.Search, { fontSize: "small" }) })
5685
5747
  }
5686
5748
  }
5687
5749
  )