applicatif 3M, user, chart

This commit is contained in:
nBiqoz
2025-10-31 20:51:39 +01:00
parent 0efe96f4e2
commit 1c7bca8e35
7 changed files with 286 additions and 84 deletions

View File

@@ -52,17 +52,17 @@ export function DashboardUsersList() {
// Récupérer toutes les données nécessaires
const { data: users, loading: usersLoading } =
useCollection<LibreChatUser>("users");
useCollection<LibreChatUser>("users", { limit: 1000 });
const { data: conversations, loading: conversationsLoading } =
useCollection<LibreChatConversation>("conversations");
useCollection<LibreChatConversation>("conversations", { limit: 1000 });
const { data: balances, loading: balancesLoading } =
useCollection<LibreChatBalance>("balances");
useCollection<LibreChatBalance>("balances", { limit: 1000 });
const { data: messages, loading: messagesLoading } =
useCollection<LibreChatMessage>("messages");
useCollection<LibreChatMessage>("messages", { limit: 1000 });
const { data: tokens, loading: tokensLoading } =
useCollection<TokenDocument>("tokens");
useCollection<TokenDocument>("tokens", { limit: 1000 });
const { data: toolcalls, loading: toolcallsLoading } =
useCollection<ToolcallDocument>("toolcalls");
useCollection<ToolcallDocument>("toolcalls", { limit: 1000 });
const processUsers = useCallback(() => {
if (
@@ -174,20 +174,23 @@ export function DashboardUsersList() {
const latestBalance = sortedBalances[0];
const credits = latestBalance ? latestBalance.tokenCredits || 0 : 0;
// Calculer les tokens consommés depuis les crédits
const INITIAL_CREDITS = 3000000;
const creditsUsed = INITIAL_CREDITS - credits;
const tokensFromCredits = creditsUsed > 0 ? creditsUsed : 0;
// Prendre la valeur la plus élevée (plus précise)
// Calculer les tokens réellement consommés depuis les messages (approche principale)
const totalTokens = Math.max(
totalTokensFromMessages,
totalTokensFromConversations,
tokensFromTokensCollection,
tokensFromToolcalls,
tokensFromCredits
tokensFromToolcalls
);
// Calculer les tokens depuis les crédits seulement si on n'a pas de données de messages
const INITIAL_CREDITS = 3000000;
const creditsUsed = INITIAL_CREDITS - credits;
const tokensFromCredits = creditsUsed > 0 ? creditsUsed : 0;
// Si on n'a pas de tokens depuis les messages mais qu'on a une consommation de crédits significative
const finalTokens = totalTokens > 0 ? totalTokens :
(tokensFromCredits > 0 && tokensFromCredits < INITIAL_CREDITS) ? tokensFromCredits : 0;
// Log de débogage très détaillé
console.log(`👤 User ${user.name || user.email}:`, {
conversations: userConversations.length,
@@ -200,7 +203,8 @@ export function DashboardUsersList() {
currentCredits: credits,
creditsUsed: creditsUsed,
tokensFromCredits: tokensFromCredits,
finalTokens: totalTokens,
finalTokens: finalTokens,
willBeIncluded: finalTokens > 0,
messagesSample: userMessages.slice(0, 2).map((m) => ({
tokenCount: m.tokenCount,
model: m.model,
@@ -213,14 +217,14 @@ export function DashboardUsersList() {
})),
});
// Ajouter l'utilisateur seulement s'il a des données significatives
if (userConversations.length > 0 || totalTokens > 0 || credits > 0) {
// Ajouter l'utilisateur s'il a consommé des tokens (éviter les faux positifs de 3M tokens)
if (finalTokens > 0 && finalTokens < INITIAL_CREDITS) {
processedUsers.push({
userId: user._id,
userName:
user.name || user.username || user.email || "Utilisateur inconnu",
conversations: userConversations.length,
tokens: totalTokens,
tokens: finalTokens,
credits: credits,
});
}
@@ -231,6 +235,17 @@ export function DashboardUsersList() {
.sort((a, b) => b.tokens - a.tokens)
.slice(0, 5);
console.log("📊 Processing summary:", {
totalUsers: users.length,
usersWithActivity: processedUsers.length,
top5Users: sortedUsers.length,
allProcessedUsers: processedUsers.map(u => ({
name: u.userName,
conversations: u.conversations,
tokens: u.tokens,
credits: u.credits
}))
});
console.log("✅ Top 5 users processed:", sortedUsers);
setTopUsers(sortedUsers);
setIsLoading(false);