@acarmisc/backstage-plugin-litellm 0.3.1 → 0.3.3

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.cjs.js CHANGED
@@ -192,7 +192,7 @@ var init_KeysTable = __esm({
192
192
  alias: "",
193
193
  models: [],
194
194
  duration: "30d",
195
- max_budget: void 0,
195
+ max_budget: 100,
196
196
  tpm_limit: void 0,
197
197
  team_id: void 0,
198
198
  key_type: "llm_api"
@@ -217,12 +217,6 @@ var init_KeysTable = __esm({
217
217
  const [newKeyValue, setNewKeyValue] = (0, import_react2.useState)(null);
218
218
  const [formData, setFormData] = (0, import_react2.useState)(emptyForm());
219
219
  const [submitting, setSubmitting] = (0, import_react2.useState)(false);
220
- (0, import_react2.useEffect)(() => {
221
- if (!generateModalOpen) return;
222
- if (!formData.team_id && teams.length > 0) {
223
- setFormData((f) => ({ ...f, team_id: teams[0].team_id }));
224
- }
225
- }, [generateModalOpen, teams, formData.team_id]);
226
220
  const canGenerate = true;
227
221
  const [editingKey, setEditingKey] = (0, import_react2.useState)(null);
228
222
  const [editForm, setEditForm] = (0, import_react2.useState)({});
@@ -236,10 +230,6 @@ var init_KeysTable = __esm({
236
230
  const response = await onGenerateKey(formData);
237
231
  setNewKeyValue(response.key);
238
232
  setFormData(emptyForm());
239
- setTimeout(() => {
240
- setGenerateModalOpen(false);
241
- setNewKeyValue(null);
242
- }, 1500);
243
233
  } catch (error) {
244
234
  console.error("Failed to generate key:", error);
245
235
  } finally {
@@ -263,7 +253,7 @@ var init_KeysTable = __esm({
263
253
  if (!editingKey) return;
264
254
  setEditSubmitting(true);
265
255
  try {
266
- await onUpdateKey(editingKey.key, editForm);
256
+ await onUpdateKey(editingKey.token ?? editingKey.key, editForm);
267
257
  handleCloseEdit();
268
258
  } catch (error) {
269
259
  console.error("Failed to update key:", error);
@@ -301,7 +291,7 @@ var init_KeysTable = __esm({
301
291
  }
302
292
  },
303
293
  shortKeyId(keyId)
304
- ), /* @__PURE__ */ import_react2.default.createElement(import_material2.IconButton, { size: "small", onClick: () => copyToClipboard(keyId), title: "Copy Key ID" }, /* @__PURE__ */ import_react2.default.createElement(import_icons_material2.ContentCopy, { fontSize: "small" })))), /* @__PURE__ */ import_react2.default.createElement(import_material2.TableCell, null, formatDate(key.created_at)), /* @__PURE__ */ import_react2.default.createElement(import_material2.TableCell, null, "$", key.spend?.toFixed(4) || "0.00"), /* @__PURE__ */ import_react2.default.createElement(import_material2.TableCell, null, key.max_budget ? `$${key.max_budget}` : "-"), /* @__PURE__ */ import_react2.default.createElement(import_material2.TableCell, null, key.tpm_limit || "-"), /* @__PURE__ */ import_react2.default.createElement(import_material2.TableCell, null, /* @__PURE__ */ import_react2.default.createElement(import_material2.Box, { display: "flex", gap: 0.5, flexWrap: "wrap" }, key.models?.slice(0, 2).map((model) => /* @__PURE__ */ import_react2.default.createElement(import_material2.Chip, { key: model, label: model, size: "small" })), (key.models?.length || 0) > 2 && /* @__PURE__ */ import_react2.default.createElement(import_material2.Chip, { label: `+${(key.models?.length || 0) - 2}`, size: "small", variant: "outlined" }))), /* @__PURE__ */ import_react2.default.createElement(import_material2.TableCell, { align: "right" }, /* @__PURE__ */ import_react2.default.createElement(import_material2.IconButton, { onClick: () => handleOpenEdit(key) }, /* @__PURE__ */ import_react2.default.createElement(import_icons_material2.Edit, { fontSize: "small" })), /* @__PURE__ */ import_react2.default.createElement(import_material2.IconButton, { color: "error", onClick: () => onDeleteKey(key.key) }, /* @__PURE__ */ import_react2.default.createElement(import_icons_material2.Delete, null))));
294
+ ), /* @__PURE__ */ import_react2.default.createElement(import_material2.IconButton, { size: "small", onClick: () => copyToClipboard(keyId), title: "Copy Key ID" }, /* @__PURE__ */ import_react2.default.createElement(import_icons_material2.ContentCopy, { fontSize: "small" })))), /* @__PURE__ */ import_react2.default.createElement(import_material2.TableCell, null, formatDate(key.created_at)), /* @__PURE__ */ import_react2.default.createElement(import_material2.TableCell, null, "$", key.spend?.toFixed(4) || "0.00"), /* @__PURE__ */ import_react2.default.createElement(import_material2.TableCell, null, key.max_budget ? `$${key.max_budget}` : "-"), /* @__PURE__ */ import_react2.default.createElement(import_material2.TableCell, null, key.tpm_limit || "-"), /* @__PURE__ */ import_react2.default.createElement(import_material2.TableCell, null, /* @__PURE__ */ import_react2.default.createElement(import_material2.Box, { display: "flex", gap: 0.5, flexWrap: "wrap" }, key.models?.slice(0, 2).map((model) => /* @__PURE__ */ import_react2.default.createElement(import_material2.Chip, { key: model, label: model, size: "small" })), (key.models?.length || 0) > 2 && /* @__PURE__ */ import_react2.default.createElement(import_material2.Chip, { label: `+${(key.models?.length || 0) - 2}`, size: "small", variant: "outlined" }))), /* @__PURE__ */ import_react2.default.createElement(import_material2.TableCell, { align: "right" }, /* @__PURE__ */ import_react2.default.createElement(import_material2.IconButton, { onClick: () => handleOpenEdit(key) }, /* @__PURE__ */ import_react2.default.createElement(import_icons_material2.Edit, { fontSize: "small" })), /* @__PURE__ */ import_react2.default.createElement(import_material2.IconButton, { color: "error", onClick: () => onDeleteKey(keyId) }, /* @__PURE__ */ import_react2.default.createElement(import_icons_material2.Delete, null))));
305
295
  }))))), /* @__PURE__ */ import_react2.default.createElement(import_material2.Dialog, { open: generateModalOpen, onClose: handleCloseModal, maxWidth: "sm", fullWidth: true }, /* @__PURE__ */ import_react2.default.createElement(import_material2.DialogTitle, null, newKeyValue ? "Key Generated" : "Generate New Key"), /* @__PURE__ */ import_react2.default.createElement(import_material2.DialogContent, null, newKeyValue ? /* @__PURE__ */ import_react2.default.createElement(import_material2.Box, null, /* @__PURE__ */ import_react2.default.createElement(import_material2.Typography, { variant: "body2", color: "text.secondary", gutterBottom: true }, "Copy this key now. You won't be able to see it again."), /* @__PURE__ */ import_react2.default.createElement(
306
296
  import_material2.Box,
307
297
  {
@@ -311,7 +301,9 @@ var init_KeysTable = __esm({
311
301
  mt: 2,
312
302
  p: 2,
313
303
  sx: {
314
- backgroundColor: "grey.100",
304
+ backgroundColor: "action.hover",
305
+ border: "1px solid",
306
+ borderColor: "divider",
315
307
  borderRadius: 1
316
308
  }
317
309
  },
@@ -331,6 +323,7 @@ var init_KeysTable = __esm({
331
323
  label: "Alias",
332
324
  value: formData.alias || "",
333
325
  onChange: (e) => setFormData({ ...formData, alias: e.target.value }),
326
+ required: true,
334
327
  fullWidth: true
335
328
  }
336
329
  ), /* @__PURE__ */ import_react2.default.createElement(
@@ -374,7 +367,7 @@ var init_KeysTable = __esm({
374
367
  value: selectedModels,
375
368
  onChange: (_e, selected) => setFormData({ ...formData, models: selected.map((m) => m.model_name) }),
376
369
  renderOption: (props, m) => /* @__PURE__ */ import_react2.default.createElement("li", { ...props }, m.model_name, m.supports_function_calling && " \u{1F527}", m.supports_vision && " \u{1F441}\uFE0F"),
377
- renderInput: (params) => /* @__PURE__ */ import_react2.default.createElement(import_material2.TextField, { ...params, label: "Models", fullWidth: true })
370
+ renderInput: (params) => /* @__PURE__ */ import_react2.default.createElement(import_material2.TextField, { ...params, label: "Models", helperText: "Leave empty to allow all models", fullWidth: true })
378
371
  }
379
372
  ), /* @__PURE__ */ import_react2.default.createElement(
380
373
  import_material2.TextField,
@@ -383,6 +376,7 @@ var init_KeysTable = __esm({
383
376
  type: "number",
384
377
  value: formData.max_budget ?? "",
385
378
  onChange: (e) => setFormData({ ...formData, max_budget: e.target.value ? Number(e.target.value) : void 0 }),
379
+ required: true,
386
380
  fullWidth: true
387
381
  }
388
382
  ), /* @__PURE__ */ import_react2.default.createElement(