@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 +9 -15
- package/dist/index.cjs.js.map +2 -2
- package/dist/index.esm.js +12 -18
- package/dist/index.esm.js.map +3 -3
- package/package.json +1 -1
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:
|
|
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(
|
|
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: "
|
|
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(
|