Metainformationen zur Seite
Librechat
- URL
- https://librechat.smns-bw.org/
- MongoDB Adminuser
- mdbo
- MongoDB Adminuser PW
- ••••••••••
npm läuft innerhalb des Containers!
Librechat updaten
docker compose down git pull docker compose pull docker compose up -d
Nutzerstatistik auslesen
npm run user-stats
Dafür musste config/user-stats.js erweitert werden:
const path = require('path');
require('module-alias')({ base: path.resolve(__dirname, '..', 'api') });
const { silentExit } = require('./helpers');
const Conversation = require('~/models/schema/convoSchema');
const Message = require('~/models/schema/messageSchema');
const User = require('~/models/User');
const { Transaction } = require('~/models/Transaction'); // Correctly destructure to get the Transaction model
const connect = require('./connect');
(async () => {
await connect();
console.log('-----------------------------');
console.log('Show the stats of all users');
console.log('-----------------------------');
let users = await User.find({});
let userData = [];
for (const user of users) {
let conversationsCount = (await Conversation.count({ user: user._id })) ?? 0;
let messagesCount = (await Message.count({ user: user._id })) ?? 0;
// Aggregate transaction data for the user
let transactions = await Transaction.find({ user: user._id });
// Aggregate transaction data for the user
let totalRawAmount = transactions.reduce((sum, tx) => sum + tx.rawAmount, 0);
let totalTokenValue = transactions.reduce((sum, tx) => sum + tx.tokenValue, 0);
userData.push({
User: user.name,
Email: user.email,
Conversations: conversationsCount,
Messages: messagesCount,
TotalRawAmount: totalRawAmount,
TotalTokenValue: totalTokenValue,
});
}
userData.sort((a, b) => {
if (a.Conversations !== b.Conversations) {
return b.Conversations - a.Conversations;
}
return b.Messages - a.Messages;
});
console.table(userData);
silentExit(0);
})();
process.on('uncaughtException', (err) => {
if (!err.message.includes('fetch failed')) {
console.error('There was an uncaught error:');
console.error(err);
}
if (!err.message.includes('fetch failed')) {
process.exit(1);
}
});
Nutzern Balance/Token geben
Im Container:
npm run add-balance wiebke.walbaum@smns-bw.de 1000000000
Es läuft ein bash Skript add_balance.sh via Crontab alle 3min, dass jedem Nutzer, der keine Balance hat 1Mrd gibt:
*/3 * * * * root /opt/librechat/add_balance.sh >> /opt/librechat/logs/add_balance.log 2>&1
#!/bin/bash
add_balance=${1:-1000000000}
response=$(docker exec LibreChat npm run list-balances | grep "has no balance")
emails=($(echo "$response" | grep -oP "[a-zA-Z0-9_.+-]+@[a-zA-Z-]+\.[a-zA-Z-.]+"))
for email in "${emails[@]}"; do
docker exec LibreChat npm run add-balance "$email" "$add_balance"
done
Nutzer händisch anlegen
In den Container via sh:
docker exec -it LibreChat sh
Nutzer anlegen z.B.:
npm run create-user Email: > sven.hirth@smns-bw.de Name: (default is: sven.hirth) > Sven Hirth Username: (default is: sven.hirth) > shirth Password: (leave blank, to generate one) > Your password is: abcdef123456 User created successfully!
Passwort dem Nutzer mitteilen.
Aktivitäten in der MongoDB
Connect:
docker exec -it chat-mongodb mongosh
Useful commands:
show dbs use LibreChat show collections db.users.find()
User erstellen
db.createUser({ user: "mdbo", pwd: "<siehe oben>", roles: ["userAdminAnyDatabase", "readWriteAnyDatabase"] })
User löschen
db.users.deleteOne({email: 'tatjana.tull@smns-bw.de'});
User Rechte geben
db.grantRolesToUser("mdbo", ["clusterAdmin", "readAnyDatabase"]);
User Plugin auf DALL-E 3 setzen
db.users.update({provider: "local"}, {$set: {plugins: ['dalle']}}, {multi: true})
User händisch auf E-Mail verifiziert setzen
db.users.updateOne(
{ username: 'wwalbaum' },
{ $set:
{
emailVerified: true
}
}
)