usage good

This commit is contained in:
Biqoz
2025-11-27 15:27:45 +01:00
parent 414253aff0
commit a34d29bf1e
3 changed files with 44 additions and 14 deletions

View File

@@ -37,7 +37,7 @@ export function UsageAnalytics() {
const { data: users = [] } = useCollection<LibreChatUser>("users", { limit: 1000 });
const { data: conversations = [] } = useCollection<LibreChatConversation>("conversations", { limit: 1000 });
const { data: transactions = [] } = useCollection<LibreChatTransaction>("transactions", { limit: 1000 });
const { data: transactions = [] } = useCollection<LibreChatTransaction>("transactions", { limit: 10000 });
const { data: balances = [] } = useCollection<LibreChatBalance>("balances", { limit: 1000 });
const calculateStats = useCallback(() => {
@@ -56,7 +56,7 @@ export function UsageAnalytics() {
// Analyser les doublons dans les balances
const userCounts = new Map<string, number>();
balances.forEach((balance) => {
const userId = balance.user;
const userId = String(balance.user);
userCounts.set(userId, (userCounts.get(userId) || 0) + 1);
});
@@ -77,7 +77,7 @@ export function UsageAnalytics() {
const duplicateDetails = Array.from(userCounts.entries())
.filter(([, count]) => count > 1)
.map(([userId, count]) => {
const userBalances = balances.filter(b => b.user === userId);
const userBalances = balances.filter(b => String(b.user) === userId);
const totalCredits = userBalances.reduce((sum, b) => sum + (b.tokenCredits || 0), 0);
return {
userId,
@@ -96,7 +96,7 @@ export function UsageAnalytics() {
// NOUVEAU : Identifier les utilisateurs fantômes
console.log("=== ANALYSE DES UTILISATEURS FANTÔMES ===");
const userIds = new Set(users.map(user => user._id));
const balanceUserIds = balances.map(balance => balance.user);
const balanceUserIds = balances.map(balance => String(balance.user));
const phantomUsers = balanceUserIds.filter(userId => !userIds.has(userId));
const uniquePhantomUsers = [...new Set(phantomUsers)];
@@ -105,7 +105,7 @@ export function UsageAnalytics() {
// Calculer les crédits des utilisateurs fantômes
const phantomCredits = balances
.filter(balance => uniquePhantomUsers.includes(balance.user))
.filter(balance => uniquePhantomUsers.includes(String(balance.user)))
.reduce((sum, balance) => sum + (balance.tokenCredits || 0), 0);
console.log("Crédits des utilisateurs fantômes:", phantomCredits);
@@ -113,7 +113,7 @@ export function UsageAnalytics() {
// Analyser les utilisateurs fantômes
const phantomDetails = uniquePhantomUsers.map(userId => {
const userBalances = balances.filter(b => b.user === userId);
const userBalances = balances.filter(b => String(b.user) === userId);
const totalCredits = userBalances.reduce((sum, b) => sum + (b.tokenCredits || 0), 0);
return { userId, totalCredits, count: userBalances.length };
});
@@ -134,13 +134,13 @@ export function UsageAnalytics() {
// Grouper les balances par utilisateur
const balancesByUser = new Map<string, LibreChatBalance[]>();
balances.forEach((balance) => {
const userId = balance.user;
const balanceUserId = String(balance.user);
// Ignorer les utilisateurs fantômes (qui n'existent plus)
if (users.some(user => user._id === userId)) {
if (!balancesByUser.has(userId)) {
balancesByUser.set(userId, []);
if (users.some(user => user._id === balanceUserId)) {
if (!balancesByUser.has(balanceUserId)) {
balancesByUser.set(balanceUserId, []);
}
balancesByUser.get(userId)!.push(balance);
balancesByUser.get(balanceUserId)!.push(balance);
}
});
@@ -186,17 +186,19 @@ export function UsageAnalytics() {
});
// Calculer les conversations par utilisateur
// conv.user est un STRING
conversations.forEach((conv) => {
const userStat = userStats.get(conv.user);
const userStat = userStats.get(String(conv.user));
if (userStat) {
userStat.conversations++;
}
});
// Calculer les tokens par utilisateur depuis les transactions
// transaction.user est un ObjectId, on le convertit en string
let totalTokensConsumed = 0;
transactions.forEach((transaction) => {
const userStat = userStats.get(transaction.user);
const userStat = userStats.get(String(transaction.user));
if (userStat && transaction.rawAmount) {
const tokens = Math.abs(Number(transaction.rawAmount) || 0);
userStat.tokens += tokens;