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

Function CountTokenRealtime

service/token_counter.go:287–339  ·  view source on GitHub ↗
(info *relaycommon.RelayInfo, request dto.RealtimeEvent, model string)

Source from the content-addressed store, hash-verified

285}
286
287func CountTokenRealtime(info *relaycommon.RelayInfo, request dto.RealtimeEvent, model string) (int, int, error) {
288 audioToken := 0
289 textToken := 0
290 switch request.Type {
291 case dto.RealtimeEventTypeSessionUpdate:
292 if request.Session != nil {
293 msgTokens := CountTextToken(request.Session.Instructions, model)
294 textToken += msgTokens
295 }
296 case dto.RealtimeEventResponseAudioDelta:
297 // count audio token
298 atk, err := CountAudioTokenOutput(request.Delta, info.OutputAudioFormat)
299 if err != nil {
300 return 0, 0, fmt.Errorf("error counting audio token: %v", err)
301 }
302 audioToken += atk
303 case dto.RealtimeEventResponseAudioTranscriptionDelta, dto.RealtimeEventResponseFunctionCallArgumentsDelta:
304 // count text token
305 tkm := CountTextToken(request.Delta, model)
306 textToken += tkm
307 case dto.RealtimeEventInputAudioBufferAppend:
308 // count audio token
309 atk, err := CountAudioTokenInput(request.Audio, info.InputAudioFormat)
310 if err != nil {
311 return 0, 0, fmt.Errorf("error counting audio token: %v", err)
312 }
313 audioToken += atk
314 case dto.RealtimeEventConversationItemCreated:
315 if request.Item != nil {
316 switch request.Item.Type {
317 case "message":
318 for _, content := range request.Item.Content {
319 if content.Type == "input_text" {
320 tokens := CountTextToken(content.Text, model)
321 textToken += tokens
322 }
323 }
324 }
325 }
326 case dto.RealtimeEventTypeResponseDone:
327 // count tools token
328 if !info.IsFirstRequest {
329 if info.RealtimeTools != nil && len(info.RealtimeTools) > 0 {
330 for _, tool := range info.RealtimeTools {
331 toolTokens := CountTokenInput(tool, model)
332 textToken += 8
333 textToken += toolTokens
334 }
335 }
336 }
337 }
338 return textToken, audioToken, nil
339}
340
341func CountTokenMessages(info *relaycommon.RelayInfo, messages []dto.Message, model string, stream bool) (int, error) {
342 //recover when panic

Callers 1

OpenaiRealtimeHandlerFunction · 0.92

Calls 4

CountTextTokenFunction · 0.85
CountAudioTokenOutputFunction · 0.85
CountAudioTokenInputFunction · 0.85
CountTokenInputFunction · 0.85

Tested by

no test coverage detected