* 创建精准的usage对象 * @param {Array|string} promptMessages - 提示消息或文本 * @param {string} completionText - 完成文本 * @param {object} realUsage - 真实的usage数据(如果有) * @param {string} model - 模型名称 * @returns {object} usage对象
(promptMessages, completionText = '', realUsage = null, model = 'gpt-3.5-turbo')
| 76 | * @returns {object} usage对象 |
| 77 | */ |
| 78 | function createUsageObject(promptMessages, completionText = '', realUsage = null, model = 'gpt-3.5-turbo') { |
| 79 | // 如果有真实的usage数据,优先使用 |
| 80 | if (realUsage && realUsage.prompt_tokens && realUsage.completion_tokens) { |
| 81 | return { |
| 82 | prompt_tokens: realUsage.prompt_tokens, |
| 83 | completion_tokens: realUsage.completion_tokens, |
| 84 | total_tokens: realUsage.total_tokens || (realUsage.prompt_tokens + realUsage.completion_tokens) |
| 85 | } |
| 86 | } |
| 87 | |
| 88 | // 计算prompt tokens |
| 89 | let promptTokens = 0 |
| 90 | if (Array.isArray(promptMessages)) { |
| 91 | promptTokens = countMessagesTokens(promptMessages, model) |
| 92 | } else if (typeof promptMessages === 'string') { |
| 93 | promptTokens = countTokens(promptMessages, model) |
| 94 | } |
| 95 | |
| 96 | // 计算completion tokens |
| 97 | const completionTokens = countTokens(completionText, model) |
| 98 | |
| 99 | return { |
| 100 | prompt_tokens: promptTokens, |
| 101 | completion_tokens: completionTokens, |
| 102 | total_tokens: promptTokens + completionTokens |
| 103 | } |
| 104 | } |
| 105 | |
| 106 | module.exports = { |
| 107 | countTokens, |
no test coverage detected