Spaces:
Running
Running
File size: 1,838 Bytes
c6afb12 614eca7 c6afb12 a290b8b c6afb12 a290b8b c85bc2e 614eca7 c85bc2e a290b8b c85bc2e c6afb12 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 | import type { BucketDataState } from '$lib/types/bucket-state';
import type { RankingDataset } from '$lib/types/ranking-data';
import { adaptBucketRanking } from './adapt-ranking';
import { fetchBucketDetailsSnapshot } from './details-snapshot';
import { emptyRankingDataset } from './fallback-data';
import { toPublicBucketError } from './public-error';
import { fetchBucketRankingSnapshot } from './ranking-snapshot';
let cached: { value: RankingDataset; snapshotId: string } | undefined;
let inFlight: Promise<RankingDataset> | undefined;
async function refreshRanking() {
const snapshot = await fetchBucketRankingSnapshot({ refreshManifest: true });
if (cached?.snapshotId === snapshot.manifest.snapshot_id) {
return cached.value;
}
const value = adaptBucketRanking(await fetchBucketDetailsSnapshot(snapshot));
cached = {
value,
snapshotId: snapshot.manifest.snapshot_id
};
return value;
}
export async function getHfBucketRanking() {
const state = await getHfBucketRankingState();
if (state.status === 'unavailable') throw new Error(state.error.message);
return state.data;
}
export async function getHfBucketRankingState(): Promise<BucketDataState<RankingDataset>> {
if (!inFlight) {
inFlight = refreshRanking().finally(() => {
inFlight = undefined;
});
}
try {
return {
status: 'ok',
source: 'remote',
data: await inFlight
};
} catch (error) {
if (cached) {
console.warn('[hf-bucket] Serving stale Ranking data after refresh failure.', error);
return {
status: 'stale',
source: 'stale',
data: cached.value,
error: toPublicBucketError(error)
};
}
console.error('[hf-bucket] Ranking data is unavailable.', error);
return {
status: 'unavailable',
source: 'unavailable',
data: emptyRankingDataset(),
error: toPublicBucketError(error)
};
}
}
|