| const { Transaction } = require('./Transaction'); |
| const { logger } = require('~/config'); |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| const spendTokens = async (txData, tokenUsage) => { |
| const { promptTokens, completionTokens } = tokenUsage; |
| logger.debug( |
| `[spendTokens] conversationId: ${txData.conversationId}${ |
| txData?.context ? ` | Context: ${txData?.context}` : '' |
| } | Token usage: `, |
| { |
| promptTokens, |
| completionTokens, |
| }, |
| ); |
| let prompt, completion; |
| try { |
| if (promptTokens >= 0) { |
| prompt = await Transaction.create({ |
| ...txData, |
| tokenType: 'prompt', |
| rawAmount: -promptTokens, |
| }); |
| } |
|
|
| if (!completionTokens && isNaN(completionTokens)) { |
| logger.debug('[spendTokens] !completionTokens', { prompt, completion }); |
| return; |
| } |
|
|
| completion = await Transaction.create({ |
| ...txData, |
| tokenType: 'completion', |
| rawAmount: -completionTokens, |
| }); |
|
|
| prompt && |
| completion && |
| logger.debug('[spendTokens] Transaction data record against balance:', { |
| user: txData.user, |
| prompt: prompt.prompt, |
| promptRate: prompt.rate, |
| completion: completion.completion, |
| completionRate: completion.rate, |
| balance: completion.balance, |
| }); |
| } catch (err) { |
| logger.error('[spendTokens]', err); |
| } |
| }; |
|
|
| module.exports = spendTokens; |
|
|