( model: SupportedModel, messages: ChatCompletionMessageParam[], )
| 13 | } |
| 14 | |
| 15 | export const countOpenAIChatTokens = ( |
| 16 | model: SupportedModel, |
| 17 | messages: ChatCompletionMessageParam[], |
| 18 | ) => { |
| 19 | const reformattedMessages = messages.map((message) => ({ |
| 20 | role: message.role, |
| 21 | // Not completely accurate, but gives a rough idea of the token count |
| 22 | content: |
| 23 | message.content || |
| 24 | JSON.stringify("function_call" in message ? message.function_call : "") || |
| 25 | JSON.stringify("tool_calls" in message ? message.tool_calls : "") || |
| 26 | "", |
| 27 | })); |
| 28 | |
| 29 | return new GPTTokens({ |
| 30 | model: getSupportedModel(model), |
| 31 | messages: reformattedMessages as unknown as GPTTokensMessageItem[], |
| 32 | }).usedTokens; |
| 33 | }; |
| 34 | |
| 35 | // "gpt-tokens" does not support new models. This is a temporary workaround. |
| 36 | function getSupportedModel(model: string): supportModelType { |
no test coverage detected