Spaces:
Runtime error
Runtime error
File size: 1,952 Bytes
cd8bd0a | 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 65 66 67 | import { useEffect, useMemo, useState } from "react";
import { collectHiddenQuotaModelIds, filterHiddenModelQuotas } from "./utils";
function getProviderKey(connections: any[]): string {
const providers = new Set<string>();
for (const conn of connections) {
if (typeof conn?.provider === "string" && conn.provider) providers.add(conn.provider);
}
return Array.from(providers).sort().join("|");
}
export function useVisibleQuotaData(
connections: any[],
quotaData: Record<string, any>
): Record<string, any> {
const [hiddenModelsByProvider, setHiddenModelsByProvider] = useState<Record<string, string[]>>(
{}
);
const providerKey = useMemo(() => getProviderKey(connections), [connections]);
useEffect(() => {
if (!providerKey) return;
let alive = true;
const providers = providerKey.split("|").filter(Boolean);
Promise.all(
providers.map(async (provider) => {
try {
const response = await fetch(
`/api/provider-models?provider=${encodeURIComponent(provider)}`
);
if (!response.ok) return [provider, []] as const;
const data = await response.json();
return [provider, collectHiddenQuotaModelIds(provider, data)] as const;
} catch {
return [provider, []] as const;
}
})
).then((entries) => {
if (alive) setHiddenModelsByProvider(Object.fromEntries(entries));
});
return () => {
alive = false;
};
}, [providerKey]);
return useMemo(() => {
const next: Record<string, any> = {};
for (const conn of connections) {
const data = quotaData[conn.id];
if (!data) continue;
next[conn.id] = {
...data,
quotas: filterHiddenModelQuotas(
conn.provider,
data.quotas,
hiddenModelsByProvider[conn.provider]
),
};
}
return next;
}, [connections, hiddenModelsByProvider, quotaData]);
}
|