( content: MessageContent, // defaults to llama2 because the tokenizer tends to produce more tokens modelName = "llama2", )
| 110 | } |
| 111 | |
| 112 | function countTokens( |
| 113 | content: MessageContent, |
| 114 | // defaults to llama2 because the tokenizer tends to produce more tokens |
| 115 | modelName = "llama2", |
| 116 | ): number { |
| 117 | const encoding = encodingForModel(modelName); |
| 118 | let baseTokens = 0; |
| 119 | if (Array.isArray(content)) { |
| 120 | baseTokens = content.reduce((acc, part) => { |
| 121 | return ( |
| 122 | acc + |
| 123 | (part.type === "text" |
| 124 | ? encoding.encode(part.text ?? "", "all", []).length |
| 125 | : countImageTokens(part)) |
| 126 | ); |
| 127 | }, 0); |
| 128 | } else { |
| 129 | baseTokens = encoding.encode(content ?? "", "all", []).length; |
| 130 | } |
| 131 | return getAdjustedTokenCountFromModel(baseTokens, modelName); |
| 132 | } |
| 133 | |
| 134 | // https://community.openai.com/t/how-to-calculate-the-tokens-when-using-function-call/266573/10 |
| 135 | function countToolsTokens(tools: Tool[], modelName: string): number { |
no test coverage detected