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

Function CountTokenClaudeRequest

service/token_counter.go:182–218  ·  view source on GitHub ↗
(request dto.ClaudeRequest, model string)

Source from the content-addressed store, hash-verified

180}
181
182func CountTokenClaudeRequest(request dto.ClaudeRequest, model string) (int, error) {
183 tkm := 0
184
185 // Count tokens in messages
186 msgTokens, err := CountTokenClaudeMessages(request.Messages, model, request.Stream)
187 if err != nil {
188 return 0, err
189 }
190 tkm += msgTokens
191
192 // Count tokens in system message
193 if request.System != "" {
194 systemTokens := CountTokenInput(request.System, model)
195 tkm += systemTokens
196 }
197
198 if request.Tools != nil {
199 // check is array
200 if tools, ok := request.Tools.([]any); ok {
201 if len(tools) > 0 {
202 parsedTools, err1 := common.Any2Type[[]dto.Tool](request.Tools)
203 if err1 != nil {
204 return 0, fmt.Errorf("tools: Input should be a valid list: %v", err)
205 }
206 toolTokens, err2 := CountTokenClaudeTools(parsedTools, model)
207 if err2 != nil {
208 return 0, fmt.Errorf("tools: %v", err)
209 }
210 tkm += toolTokens
211 }
212 } else {
213 return 0, errors.New("tools: Input should be a valid list")
214 }
215 }
216
217 return tkm, nil
218}
219
220func CountTokenClaudeMessages(messages []dto.ClaudeMessage, model string, stream bool) (int, error) {
221 tokenEncoder := getTokenEncoder(model)

Callers 1

getClaudePromptTokensFunction · 0.92

Calls 3

CountTokenClaudeMessagesFunction · 0.85
CountTokenInputFunction · 0.85
CountTokenClaudeToolsFunction · 0.85

Tested by

no test coverage detected