@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 +2 -0
- package/dist/index.cjs.js +26 -5
- package/dist/index.cjs.js.map +2 -2
- package/dist/router.js +43 -5
- package/dist/types.cjs.js.map +1 -1
- package/dist/types.d.ts +4 -0
- package/package.json +1 -1
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);
|