@acarmisc/backstage-plugin-litellm-backend 0.17.1 → 0.17.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
@@ -7983,20 +7983,20 @@ __export(index_exports, {
7983
7983
  getOrProvisionUser: () => getOrProvisionUser,
7984
7984
  getOrProvisionUserFromClaims: () => getOrProvisionUserFromClaims,
7985
7985
  isTeamManagementEnabled: () => isTeamManagementEnabled,
7986
- litellmAuditReadPermission: () => import_backstage_plugin_litellm_common10.litellmAuditReadPermission,
7987
- litellmKeyCreatePermission: () => import_backstage_plugin_litellm_common10.litellmKeyCreatePermission,
7988
- litellmKeyManagePermission: () => import_backstage_plugin_litellm_common10.litellmKeyManagePermission,
7989
- litellmKeyResetSpendPermission: () => import_backstage_plugin_litellm_common10.litellmKeyResetSpendPermission,
7990
- litellmKeyRevokePermission: () => import_backstage_plugin_litellm_common10.litellmKeyRevokePermission,
7991
- litellmKeyUnblockPermission: () => import_backstage_plugin_litellm_common10.litellmKeyUnblockPermission,
7992
- litellmPermissions: () => import_backstage_plugin_litellm_common10.litellmPermissions,
7986
+ litellmAuditReadPermission: () => import_backstage_plugin_litellm_common11.litellmAuditReadPermission,
7987
+ litellmKeyCreatePermission: () => import_backstage_plugin_litellm_common11.litellmKeyCreatePermission,
7988
+ litellmKeyManagePermission: () => import_backstage_plugin_litellm_common11.litellmKeyManagePermission,
7989
+ litellmKeyResetSpendPermission: () => import_backstage_plugin_litellm_common11.litellmKeyResetSpendPermission,
7990
+ litellmKeyRevokePermission: () => import_backstage_plugin_litellm_common11.litellmKeyRevokePermission,
7991
+ litellmKeyUnblockPermission: () => import_backstage_plugin_litellm_common11.litellmKeyUnblockPermission,
7992
+ litellmPermissions: () => import_backstage_plugin_litellm_common11.litellmPermissions,
7993
7993
  litellmPlugin: () => litellmPlugin,
7994
- litellmTeamCreatePermission: () => import_backstage_plugin_litellm_common10.litellmTeamCreatePermission,
7995
- litellmTeamDeletePermission: () => import_backstage_plugin_litellm_common10.litellmTeamDeletePermission,
7996
- litellmTeamKnowledgebaseManagePermission: () => import_backstage_plugin_litellm_common10.litellmTeamKnowledgebaseManagePermission,
7997
- litellmTeamManagePermission: () => import_backstage_plugin_litellm_common10.litellmTeamManagePermission,
7998
- litellmTeamMcpManagePermission: () => import_backstage_plugin_litellm_common10.litellmTeamMcpManagePermission,
7999
- litellmTeamMembersManagePermission: () => import_backstage_plugin_litellm_common10.litellmTeamMembersManagePermission,
7994
+ litellmTeamCreatePermission: () => import_backstage_plugin_litellm_common11.litellmTeamCreatePermission,
7995
+ litellmTeamDeletePermission: () => import_backstage_plugin_litellm_common11.litellmTeamDeletePermission,
7996
+ litellmTeamKnowledgebaseManagePermission: () => import_backstage_plugin_litellm_common11.litellmTeamKnowledgebaseManagePermission,
7997
+ litellmTeamManagePermission: () => import_backstage_plugin_litellm_common11.litellmTeamManagePermission,
7998
+ litellmTeamMcpManagePermission: () => import_backstage_plugin_litellm_common11.litellmTeamMcpManagePermission,
7999
+ litellmTeamMembersManagePermission: () => import_backstage_plugin_litellm_common11.litellmTeamMembersManagePermission,
8000
8000
  newDefaultVerifier: () => newDefaultVerifier,
8001
8001
  normalizeRequestTags: () => normalizeRequestTags,
8002
8002
  provisionUser: () => provisionUser,
@@ -8979,7 +8979,7 @@ async function resolveUserRole(userEntityRef, roleConfigs, catalogClient, auth,
8979
8979
  }
8980
8980
 
8981
8981
  // src/router.ts
8982
- var import_backstage_plugin_litellm_common8 = require("@acarmisc/backstage-plugin-litellm-common");
8982
+ var import_backstage_plugin_litellm_common9 = require("@acarmisc/backstage-plugin-litellm-common");
8983
8983
 
8984
8984
  // src/teamAdmin.ts
8985
8985
  var import_plugin_permission_common = __toESM(require_index_cjs2());
@@ -12850,6 +12850,7 @@ async function bridgeGenerateKey(client, claims, provisioningEnabled, provisioni
12850
12850
 
12851
12851
  // src/routes/bridge.ts
12852
12852
  var import_backstage_plugin_litellm_common7 = require("@acarmisc/backstage-plugin-litellm-common");
12853
+ var import_backstage_plugin_litellm_common8 = require("@acarmisc/backstage-plugin-litellm-common");
12853
12854
  function registerBridgeRoutes(router, ctx, bridgeOpts) {
12854
12855
  const {
12855
12856
  client,
@@ -12863,7 +12864,7 @@ function registerBridgeRoutes(router, ctx, bridgeOpts) {
12863
12864
  keyValidationConfig
12864
12865
  } = ctx;
12865
12866
  const { config } = bridgeOpts;
12866
- const generateKeyInputSchema = (0, import_backstage_plugin_litellm_common7.createGenerateKeyInputSchema)(ctx.keyValidationConfig);
12867
+ const generateKeyInputSchema = (0, import_backstage_plugin_litellm_common8.createGenerateKeyInputSchema)(ctx.keyValidationConfig);
12867
12868
  const bridgeCfg = readBridgeConfig(config);
12868
12869
  const bridgeIdentity = {
12869
12870
  userIdDomain,
@@ -12939,6 +12940,9 @@ function registerBridgeRoutes(router, ctx, bridgeOpts) {
12939
12940
  return;
12940
12941
  }
12941
12942
  const input = parseResult.data;
12943
+ if (!allowUnlimitedBudget && input.max_budget === void 0) {
12944
+ input.max_budget = provisioningDefaults.maxBudget;
12945
+ }
12942
12946
  const userId = resolveBridgeUserId(claims, bridgeIdentity);
12943
12947
  const keyCreateCtx = {
12944
12948
  client,
@@ -12967,11 +12971,50 @@ function registerBridgeRoutes(router, ctx, bridgeOpts) {
12967
12971
  handleBridgeError(error, res);
12968
12972
  }
12969
12973
  });
12974
+ router.get("/bridge/user/info", async (req, res) => {
12975
+ try {
12976
+ const claims = await requireClaims(req);
12977
+ const user = await getOrProvisionUserFromClaims(
12978
+ client,
12979
+ claims,
12980
+ provisioningEnabled,
12981
+ provisioningDefaults,
12982
+ logger,
12983
+ bridgeIdentity
12984
+ );
12985
+ res.json({ user_id: user.user_id, teams: user.teams ?? [] });
12986
+ } catch (error) {
12987
+ handleBridgeError(error, res);
12988
+ }
12989
+ });
12970
12990
  router.get("/bridge/models", async (req, res) => {
12971
12991
  try {
12972
- await requireClaims(req);
12992
+ const claims = await requireClaims(req);
12993
+ const teamId = typeof req.query.team_id === "string" ? req.query.team_id : "";
12973
12994
  const models = await client.listModels();
12974
- res.json(models);
12995
+ if (!teamId) {
12996
+ res.json(models);
12997
+ return;
12998
+ }
12999
+ const user = await getOrProvisionUserFromClaims(
13000
+ client,
13001
+ claims,
13002
+ provisioningEnabled,
13003
+ provisioningDefaults,
13004
+ logger,
13005
+ bridgeIdentity
13006
+ );
13007
+ if (!(user.teams ?? []).includes(teamId)) {
13008
+ res.status(403).json({ error: "Access denied: team is not one of your teams", team_id: teamId });
13009
+ return;
13010
+ }
13011
+ const team = await client.getTeamInfo(teamId);
13012
+ const allowed = team.models;
13013
+ if (!allowed || allowed.length === 0 || allowed.includes(import_backstage_plugin_litellm_common7.ALL_PROXY_MODELS)) {
13014
+ res.json(models);
13015
+ return;
13016
+ }
13017
+ res.json(models.filter((m) => (0, import_backstage_plugin_litellm_common7.isModelAllowed)(m, allowed)));
12975
13018
  } catch (error) {
12976
13019
  handleBridgeError(error, res);
12977
13020
  }
@@ -13003,7 +13046,7 @@ async function createRouter(options) {
13003
13046
  const keyMaxBudget = config.getOptionalNumber("litellm.keys.maxBudget") ?? 100;
13004
13047
  const keyMaxTpm = config.getOptionalNumber("litellm.keys.maxTpm") ?? 1e5;
13005
13048
  const keyMaxRpm = config.getOptionalNumber("litellm.keys.maxRpm") ?? 1e3;
13006
- const keyAllowedDurations = config.getOptionalStringArray("litellm.keys.allowedDurations") ?? import_backstage_plugin_litellm_common8.DEFAULT_KEY_DURATIONS;
13049
+ const keyAllowedDurations = config.getOptionalStringArray("litellm.keys.allowedDurations") ?? import_backstage_plugin_litellm_common9.DEFAULT_KEY_DURATIONS;
13007
13050
  const keyValidationConfig = {
13008
13051
  maxBudget: keyMaxBudget,
13009
13052
  maxTpm: keyMaxTpm,
@@ -13194,7 +13237,7 @@ async function createRouter(options) {
13194
13237
  }
13195
13238
 
13196
13239
  // src/plugin.ts
13197
- var import_backstage_plugin_litellm_common9 = require("@acarmisc/backstage-plugin-litellm-common");
13240
+ var import_backstage_plugin_litellm_common10 = require("@acarmisc/backstage-plugin-litellm-common");
13198
13241
  var litellmPlugin = (0, import_backend_plugin_api.createBackendPlugin)({
13199
13242
  pluginId: "litellm",
13200
13243
  register(reg) {
@@ -13217,7 +13260,7 @@ var litellmPlugin = (0, import_backend_plugin_api.createBackendPlugin)({
13217
13260
  permissions,
13218
13261
  permissionsRegistry
13219
13262
  }) {
13220
- permissionsRegistry.addPermissions(import_backstage_plugin_litellm_common9.litellmPermissions);
13263
+ permissionsRegistry.addPermissions(import_backstage_plugin_litellm_common10.litellmPermissions);
13221
13264
  const router = await createRouter({
13222
13265
  config,
13223
13266
  logger,
@@ -13241,7 +13284,7 @@ var litellmPlugin = (0, import_backend_plugin_api.createBackendPlugin)({
13241
13284
  });
13242
13285
 
13243
13286
  // src/index.ts
13244
- var import_backstage_plugin_litellm_common10 = require("@acarmisc/backstage-plugin-litellm-common");
13287
+ var import_backstage_plugin_litellm_common11 = require("@acarmisc/backstage-plugin-litellm-common");
13245
13288
  // Annotate the CommonJS export names for ESM import in node:
13246
13289
  0 && (module.exports = {
13247
13290
  KeycloakJWTVerifier,