librechat-balances/LibreChat-Balance-Commands.md
DJP 2cc8178a18 Add credit request system with public form and admin dashboard
- Public page at /request for users to submit top-up requests
  (email + OMG job number, no auth required)
- Admin "Requests" view with pending/processed/all filters
- Approve with preset amounts (5M/10M/20M) or reject
- Pending count badge in sidebar nav
- Request data stored in JSON file (data/requests.json)
- Data volume mounted for persistence across rebuilds

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-20 14:43:42 -04:00

145 lines
3.6 KiB
Markdown

# LibreChat Balance Management Commands
All commands run from `/opt/LibreChat` on the dev server.
---
## View Balances
### List all user balances
```bash
docker compose exec api npm run list-balances
```
### Check a specific user's balance
```bash
docker compose exec mongodb mongosh --eval '
const user = db.getSiblingDB("LibreChat").getCollection("users").findOne({ email: "USER_EMAIL" });
if (user) {
const balance = db.getSiblingDB("LibreChat").getCollection("balances").findOne({ user: user._id });
print(JSON.stringify(balance, null, 2));
} else {
print("User not found");
}
'
```
---
## Add Tokens
### Add tokens to a specific user (increments existing balance)
```bash
docker compose exec mongodb mongosh --eval '
const user = db.getSiblingDB("LibreChat").getCollection("users").findOne({ email: "USER_EMAIL" });
if (user) {
db.getSiblingDB("LibreChat").getCollection("balances").updateOne(
{ user: user._id },
{ $inc: { tokenCredits: AMOUNT } },
{ upsert: true }
);
print("Added AMOUNT tokens for " + user.email);
} else {
print("User not found");
}
'
```
### Add tokens to ALL users
```bash
docker compose exec mongodb mongosh --eval '
const result = db.getSiblingDB("LibreChat").getCollection("balances").updateMany(
{},
{ $inc: { tokenCredits: AMOUNT } }
);
print("Updated " + result.modifiedCount + " users");
'
```
### Create balances for all users who don't have one yet
```bash
docker compose exec mongodb mongosh --eval '
const users = db.getSiblingDB("LibreChat").getCollection("users").find({}, {_id: 1, email: 1}).toArray();
const ops = users.map(u => ({
updateOne: {
filter: { user: u._id },
update: { $setOnInsert: { tokenCredits: AMOUNT } },
upsert: true
}
}));
if (ops.length > 0) {
const result = db.getSiblingDB("LibreChat").getCollection("balances").bulkWrite(ops);
print("Processed " + ops.length + " users, inserted " + result.upsertedCount + " new balances");
}
'
```
---
## Set Balance
### Set a specific user's balance to an exact amount (overwrites)
```bash
docker compose exec mongodb mongosh --eval '
const user = db.getSiblingDB("LibreChat").getCollection("users").findOne({ email: "USER_EMAIL" });
if (user) {
db.getSiblingDB("LibreChat").getCollection("balances").updateOne(
{ user: user._id },
{ $set: { tokenCredits: AMOUNT } },
{ upsert: true }
);
print("Set balance to AMOUNT for " + user.email);
} else {
print("User not found");
}
'
```
### Set ALL users to an exact balance
```bash
docker compose exec mongodb mongosh --eval '
const result = db.getSiblingDB("LibreChat").getCollection("balances").updateMany(
{},
{ $set: { tokenCredits: AMOUNT } }
);
print("Set balance for " + result.modifiedCount + " users");
'
```
---
## Built-in CLI Commands (alternative)
```bash
# Add to existing balance
docker compose exec api npm run add-balance USER_EMAIL AMOUNT
# Set exact balance
docker compose exec api npm run set-balance USER_EMAIL AMOUNT
# List all balances
docker compose exec api npm run list-balances
```
---
## Quick Reference
| Action | Replace |
|---|---|
| User email | `USER_EMAIL` with the actual email |
| Token amount | `AMOUNT` with a number (e.g. `1000000` = 1M tokens) |
## Balance Config (librechat.yaml)
```yaml
balance:
enabled: true
startBalance: 20000 # tokens for new users
autoRefillEnabled: false
refillIntervalValue: 30
refillIntervalUnit: "days"
refillAmount: 10000
```
After editing `librechat.yaml`, restart: `docker compose down && docker compose up -d`