MCPcopy Create free account
hub / github.com/aiprodcoder/MIXAPI / CountTokenClaudeMessages

Function CountTokenClaudeMessages

service/token_counter.go:220–264  ·  view source on GitHub ↗
(messages []dto.ClaudeMessage, model string, stream bool)

Source from the content-addressed store, hash-verified

218}
219
220func CountTokenClaudeMessages(messages []dto.ClaudeMessage, model string, stream bool) (int, error) {
221 tokenEncoder := getTokenEncoder(model)
222 tokenNum := 0
223
224 for _, message := range messages {
225 // Count tokens for role
226 tokenNum += getTokenNum(tokenEncoder, message.Role)
227 if message.IsStringContent() {
228 tokenNum += getTokenNum(tokenEncoder, message.GetStringContent())
229 } else {
230 content, err := message.ParseContent()
231 if err != nil {
232 return 0, err
233 }
234 for _, mediaMessage := range content {
235 switch mediaMessage.Type {
236 case "text":
237 tokenNum += getTokenNum(tokenEncoder, mediaMessage.GetText())
238 case "image":
239 //imageTokenNum, err := getClaudeImageToken(mediaMsg.Source, model, stream)
240 //if err != nil {
241 // return 0, err
242 //}
243 tokenNum += 1000
244 case "tool_use":
245 if mediaMessage.Input != nil {
246 tokenNum += getTokenNum(tokenEncoder, mediaMessage.Name)
247 inputJSON, _ := json.Marshal(mediaMessage.Input)
248 tokenNum += getTokenNum(tokenEncoder, string(inputJSON))
249 }
250 case "tool_result":
251 if mediaMessage.Content != nil {
252 contentJSON, _ := json.Marshal(mediaMessage.Content)
253 tokenNum += getTokenNum(tokenEncoder, string(contentJSON))
254 }
255 }
256 }
257 }
258 }
259
260 // Add a constant for message formatting (this may need adjustment based on Claude's exact formatting)
261 tokenNum += len(messages) * 2 // Assuming 2 tokens per message for formatting
262
263 return tokenNum, nil
264}
265
266func CountTokenClaudeTools(tools []dto.Tool, model string) (int, error) {
267 tokenEncoder := getTokenEncoder(model)

Callers 1

CountTokenClaudeRequestFunction · 0.85

Calls 6

getTokenEncoderFunction · 0.85
getTokenNumFunction · 0.85
GetTextMethod · 0.80
IsStringContentMethod · 0.45
GetStringContentMethod · 0.45
ParseContentMethod · 0.45

Tested by

no test coverage detected