mirror of
https://github.com/danny-avila/LibreChat.git
synced 2025-09-22 08:12:00 +02:00

* 🚀 feat: Introduce data schemas and refactor models to use @librechat/data-schemas * 🚀 feat: Add installation step for Data Schemas Package in backend review workflow * chore: Add `data-schemas` package to update/rebuild packages scripts * chore: Update Dockerfile to include data-schemas package build process * fix: add missing @rollup/plugin-typescript package * chore: Add GitHub Actions workflow for publishing data-schemas package --------- Co-authored-by: Danny Avila <danny@librechat.ai>
44 lines
1 KiB
JavaScript
44 lines
1 KiB
JavaScript
const mongoose = require('mongoose');
|
|
const { balanceSchema } = require('@librechat/data-schemas');
|
|
const { getMultiplier } = require('./tx');
|
|
const { logger } = require('~/config');
|
|
|
|
balanceSchema.statics.check = async function ({
|
|
user,
|
|
model,
|
|
endpoint,
|
|
valueKey,
|
|
tokenType,
|
|
amount,
|
|
endpointTokenConfig,
|
|
}) {
|
|
const multiplier = getMultiplier({ valueKey, tokenType, model, endpoint, endpointTokenConfig });
|
|
const tokenCost = amount * multiplier;
|
|
const { tokenCredits: balance } = (await this.findOne({ user }, 'tokenCredits').lean()) ?? {};
|
|
|
|
logger.debug('[Balance.check]', {
|
|
user,
|
|
model,
|
|
endpoint,
|
|
valueKey,
|
|
tokenType,
|
|
amount,
|
|
balance,
|
|
multiplier,
|
|
endpointTokenConfig: !!endpointTokenConfig,
|
|
});
|
|
|
|
if (!balance) {
|
|
return {
|
|
canSpend: false,
|
|
balance: 0,
|
|
tokenCost,
|
|
};
|
|
}
|
|
|
|
logger.debug('[Balance.check]', { tokenCost });
|
|
|
|
return { canSpend: balance >= tokenCost, balance, tokenCost };
|
|
};
|
|
|
|
module.exports = mongoose.model('Balance', balanceSchema);
|