@acarmisc/backstage-plugin-litellm 0.18.0 → 0.18.1

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
@@ -3009,6 +3009,9 @@ import Tooltip3 from "@mui/material/Tooltip";
3009
3009
  import Snackbar from "@mui/material/Snackbar";
3010
3010
  import Alert3 from "@mui/material/Alert";
3011
3011
  import { alpha as alpha5, useTheme as useTheme2 } from "@mui/material/styles";
3012
+ import TextField5 from "@mui/material/TextField";
3013
+ import InputAdornment2 from "@mui/material/InputAdornment";
3014
+ import { Search as Search2 } from "@mui/icons-material";
3012
3015
  function isModelAllowedByTeam2(model, teamModels) {
3013
3016
  if (!teamModels || teamModels.length === 0 || teamModels.includes(ALL_PROXY_MODELS2)) return true;
3014
3017
  return teamModels.includes(model.model_name) || !!model.access_groups?.some((group) => teamModels.includes(group));
@@ -3035,6 +3038,7 @@ var init_ModelsTable = __esm({
3035
3038
  ModelsTable = ({ allModels, teams, loading }) => {
3036
3039
  const theme = useTheme2();
3037
3040
  const [selectedTeamId, setSelectedTeamId] = useState6("");
3041
+ const [filterText, setFilterText] = useState6("");
3038
3042
  const [copiedSnackbar, setCopiedSnackbar] = useState6(false);
3039
3043
  const selectedTeam = useMemo6(
3040
3044
  () => teams.find((t) => t.team_id === selectedTeamId) ?? null,
@@ -3042,8 +3046,15 @@ var init_ModelsTable = __esm({
3042
3046
  );
3043
3047
  const filteredModels = useMemo6(() => {
3044
3048
  if (!selectedTeam) return [];
3045
- return allModels.filter((model) => isModelAllowedByTeam2(model, selectedTeam.models));
3046
- }, [allModels, selectedTeam]);
3049
+ let result = allModels.filter((model) => isModelAllowedByTeam2(model, selectedTeam.models));
3050
+ if (filterText.trim()) {
3051
+ const q = filterText.toLowerCase();
3052
+ result = result.filter(
3053
+ (model) => model.model_name.toLowerCase().includes(q) || (model.access_groups || []).some((group) => group.toLowerCase().includes(q))
3054
+ );
3055
+ }
3056
+ return result;
3057
+ }, [allModels, selectedTeam, filterText]);
3047
3058
  const handleCopyModelId = useCallback((modelId) => {
3048
3059
  navigator.clipboard.writeText(modelId).then(() => setCopiedSnackbar(true));
3049
3060
  }, []);
@@ -3076,7 +3087,19 @@ var init_ModelsTable = __esm({
3076
3087
  onChange: (e) => setSelectedTeamId(e.target.value)
3077
3088
  },
3078
3089
  teams.map((t) => /* @__PURE__ */ React8.createElement(MenuItem4, { key: t.team_id, value: t.team_id }, t.team_alias ?? t.team_id))
3079
- ))),
3090
+ )), /* @__PURE__ */ React8.createElement(
3091
+ TextField5,
3092
+ {
3093
+ label: "Filter Models",
3094
+ size: "small",
3095
+ value: filterText,
3096
+ onChange: (e) => setFilterText(e.target.value),
3097
+ sx: { minWidth: 240, mb: 2 },
3098
+ InputProps: {
3099
+ startAdornment: /* @__PURE__ */ React8.createElement(InputAdornment2, { position: "start" }, /* @__PURE__ */ React8.createElement(Search2, { fontSize: "small" }))
3100
+ }
3101
+ }
3102
+ )),
3080
3103
  loading && /* @__PURE__ */ React8.createElement(EmptyState, { message: "Loading models\u2026" }),
3081
3104
  !loading && !selectedTeamId && /* @__PURE__ */ React8.createElement(
3082
3105
  EmptyState,
@@ -3148,7 +3171,7 @@ import TableContainer6 from "@mui/material/TableContainer";
3148
3171
  import TableHead6 from "@mui/material/TableHead";
3149
3172
  import TableRow6 from "@mui/material/TableRow";
3150
3173
  import TablePagination from "@mui/material/TablePagination";
3151
- import TextField5 from "@mui/material/TextField";
3174
+ import TextField6 from "@mui/material/TextField";
3152
3175
  import MenuItem5 from "@mui/material/MenuItem";
3153
3176
  import Skeleton5 from "@mui/material/Skeleton";
3154
3177
  import Collapse2 from "@mui/material/Collapse";
@@ -3294,7 +3317,7 @@ var init_AuditLog = __esm({
3294
3317
  subtitle: loading ? "Loading\u2026" : `${total.toLocaleString()} event${total === 1 ? "" : "s"}`,
3295
3318
  flush: true,
3296
3319
  actions: /* @__PURE__ */ React9.createElement(React9.Fragment, null, /* @__PURE__ */ React9.createElement(
3297
- TextField5,
3320
+ TextField6,
3298
3321
  {
3299
3322
  size: "small",
3300
3323
  label: "Action",
@@ -3312,7 +3335,7 @@ var init_AuditLog = __esm({
3312
3335
  /* @__PURE__ */ React9.createElement(MenuItem5, { value: "deleted" }, "Deleted"),
3313
3336
  /* @__PURE__ */ React9.createElement(MenuItem5, { value: "blocked" }, "Blocked")
3314
3337
  ), /* @__PURE__ */ React9.createElement(
3315
- TextField5,
3338
+ TextField6,
3316
3339
  {
3317
3340
  size: "small",
3318
3341
  label: "Table",
@@ -3331,7 +3354,7 @@ var init_AuditLog = __esm({
3331
3354
  /* @__PURE__ */ React9.createElement(MenuItem5, { value: "LiteLLM_ObjectPermissionTable" }, "Team access (KB / MCP)"),
3332
3355
  /* @__PURE__ */ React9.createElement(MenuItem5, { value: "LiteLLM_UserTable" }, "User")
3333
3356
  ), /* @__PURE__ */ React9.createElement(
3334
- TextField5,
3357
+ TextField6,
3335
3358
  {
3336
3359
  size: "small",
3337
3360
  label: "Changed by",