@acarmisc/backstage-plugin-litellm-backend 0.11.0 → 0.12.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.
package/dist/client.js CHANGED
@@ -98,6 +98,7 @@ class LiteLLMClient {
98
98
  teams: teamIds,
99
99
  models: inner.models ?? raw?.models,
100
100
  max_budget: inner.max_budget ?? raw?.max_budget,
101
+ budget_duration: inner.budget_duration ?? raw?.budget_duration,
101
102
  spend: inner.spend ?? raw?.spend,
102
103
  current_spend: inner.current_spend ?? raw?.current_spend,
103
104
  soft_limit: inner.soft_limit ?? raw?.soft_limit,
@@ -162,6 +163,7 @@ class LiteLLMClient {
162
163
  expires_at: k.expires ?? undefined,
163
164
  spend: k.spend ?? 0,
164
165
  max_budget: k.max_budget ?? undefined,
166
+ budget_duration: k.budget_duration ?? undefined,
165
167
  tpm_limit: k.tpm_limit ?? undefined,
166
168
  rpm_limit: k.rpm_limit ?? undefined,
167
169
  models: k.models ?? [],
package/dist/index.cjs.js CHANGED
@@ -8099,6 +8099,7 @@ var LiteLLMClient = class {
8099
8099
  teams: teamIds,
8100
8100
  models: inner.models ?? raw?.models,
8101
8101
  max_budget: inner.max_budget ?? raw?.max_budget,
8102
+ budget_duration: inner.budget_duration ?? raw?.budget_duration,
8102
8103
  spend: inner.spend ?? raw?.spend,
8103
8104
  current_spend: inner.current_spend ?? raw?.current_spend,
8104
8105
  soft_limit: inner.soft_limit ?? raw?.soft_limit,
@@ -8161,6 +8162,7 @@ var LiteLLMClient = class {
8161
8162
  expires_at: k.expires ?? void 0,
8162
8163
  spend: k.spend ?? 0,
8163
8164
  max_budget: k.max_budget ?? void 0,
8165
+ budget_duration: k.budget_duration ?? void 0,
8164
8166
  tpm_limit: k.tpm_limit ?? void 0,
8165
8167
  rpm_limit: k.rpm_limit ?? void 0,
8166
8168
  models: k.models ?? [],
@@ -10827,6 +10829,25 @@ function validateTeamPatchInput(input, cfg) {
10827
10829
 
10828
10830
  // src/router.ts
10829
10831
  var teamCreateInFlight = /* @__PURE__ */ new Map();
10832
+ var TEAM_FETCH_RETRY_DELAYS_MS = [100, 300, 900];
10833
+ function isRetryableTeamFetchError(err) {
10834
+ if (err instanceof LiteLLMUpstreamError) {
10835
+ return err.status >= 500;
10836
+ }
10837
+ return true;
10838
+ }
10839
+ async function withTeamFetchRetry(fn, delaysMs = TEAM_FETCH_RETRY_DELAYS_MS) {
10840
+ for (let attempt = 0; ; attempt++) {
10841
+ try {
10842
+ return await fn();
10843
+ } catch (err) {
10844
+ if (attempt >= delaysMs.length || !isRetryableTeamFetchError(err)) {
10845
+ throw err;
10846
+ }
10847
+ await new Promise((resolve) => setTimeout(resolve, delaysMs[attempt]));
10848
+ }
10849
+ }
10850
+ }
10830
10851
  async function createRouter(options) {
10831
10852
  const { config, logger, auth, discovery, permissions } = options;
10832
10853
  const baseUrl = config.getString("litellm.baseUrl");
@@ -11260,8 +11281,8 @@ async function createRouter(options) {
11260
11281
  }
11261
11282
  const teams = await Promise.all(
11262
11283
  userInfo.teams.map(
11263
- (teamId) => client.getTeamInfo(teamId).catch((err) => {
11264
- logger.warn(`Failed to fetch team ${teamId}: ${err.message}`);
11284
+ (teamId) => withTeamFetchRetry(() => client.getTeamInfo(teamId)).catch((err) => {
11285
+ logger.warn(`Failed to fetch team ${teamId} after retries: ${err.message}`);
11265
11286
  return null;
11266
11287
  })
11267
11288
  )
@@ -11494,7 +11515,7 @@ async function createRouter(options) {
11494
11515
  }
11495
11516
  let existing;
11496
11517
  try {
11497
- existing = await client.getTeamInfo(teamId);
11518
+ existing = await withTeamFetchRetry(() => client.getTeamInfo(teamId));
11498
11519
  } catch (err) {
11499
11520
  if (err instanceof LiteLLMUpstreamError && err.status === 404) {
11500
11521
  res.status(404).json({ error: "Team not found" });
@@ -11608,7 +11629,7 @@ async function createRouter(options) {
11608
11629
  member: litellmUserId,
11609
11630
  owningGroup
11610
11631
  });
11611
- const updated = await client.getTeamInfo(teamId);
11632
+ const updated = await withTeamFetchRetry(() => client.getTeamInfo(teamId));
11612
11633
  res.json(updated);
11613
11634
  } catch (err) {
11614
11635
  sendTeamError(err, res);
@@ -11639,7 +11660,7 @@ async function createRouter(options) {
11639
11660
  member: litellmUserId,
11640
11661
  owningGroup
11641
11662
  });
11642
- const updated = await client.getTeamInfo(teamId);
11663
+ const updated = await withTeamFetchRetry(() => client.getTeamInfo(teamId));
11643
11664
  res.json(updated);
11644
11665
  } catch (err) {
11645
11666
  sendTeamError(err, res);