MCPcopy Create free account
hub / github.com/Rfym21/Qwen2API / countMessagesTokens

Function countMessagesTokens

src/utils/precise-tokenizer.js:31–68  ·  view source on GitHub ↗

* 计算消息数组的token数量 * @param {Array} messages - 消息数组 * @param {string} model - 模型名称 * @returns {number} 总token数量

(messages, model = 'gpt-3.5-turbo')

Source from the content-addressed store, hash-verified

29 * @param {string} model - 模型名称
30 * @returns {number} 总token数量
31 */
32function countMessagesTokens(messages, model = 'gpt-3.5-turbo') {
33 if (!Array.isArray(messages)) return 0
34
35 let totalTokens = 0
36
37 // 每条消息的基础开销(根据OpenAI文档)
38 const messageOverhead = 4 // 每条消息约4个token的格式开销
39
40 for (const message of messages) {
41 totalTokens += messageOverhead
42
43 // 角色token
44 if (message.role) {
45 totalTokens += countTokens(message.role, model)
46 }
47
48 // 内容token
49 if (typeof message.content === 'string') {
50 totalTokens += countTokens(message.content, model)
51 } else if (Array.isArray(message.content)) {
52 for (const item of message.content) {
53 if (item.text) {
54 totalTokens += countTokens(item.text, model)
55 }
56 }
57 }
58
59 // 函数调用等其他字段的token计算
60 if (message.function_call) {
61 totalTokens += countTokens(JSON.stringify(message.function_call), model)
62 }
63 }
64
65 // 对话的额外开销
66 totalTokens += 2 // 对话开始和结束的token
67
68 return totalTokens
69}
70
71/**

Callers 1

createUsageObjectFunction · 0.85

Calls 1

countTokensFunction · 0.85

Tested by

no test coverage detected