@@ -105,17 +105,19 @@ func CountTokenMessages(messages []types.ChatCompletionMessage, model string, pr
105105 tokensPerName = 1
106106 }
107107 tokenNum := 0
108+ var textMsg strings.Builder
109+
108110 for _ , message := range messages {
109111 tokenNum += tokensPerMessage
110112 switch v := message .Content .(type ) {
111113 case string :
112- tokenNum += GetTokenNum ( tokenEncoder , v )
114+ textMsg . WriteString ( v + " \n " )
113115 case []any :
114116 for _ , it := range v {
115117 m := it .(map [string ]any )
116118 switch m ["type" ] {
117119 case "text" :
118- tokenNum += GetTokenNum ( tokenEncoder , m ["text" ].(string ))
120+ textMsg . WriteString ( m ["text" ].(string ) + " \n " )
119121 case "image_url" :
120122 if preCostType == config .PreCostNotImage {
121123 continue
@@ -140,12 +142,18 @@ func CountTokenMessages(messages []types.ChatCompletionMessage, model string, pr
140142 }
141143 }
142144 }
143- tokenNum += GetTokenNum (tokenEncoder , message .Role )
145+ textMsg .WriteString (message .Role + "\n " )
146+
144147 if message .Name != nil {
145148 tokenNum += tokensPerName
146- tokenNum += GetTokenNum ( tokenEncoder , * message .Name )
149+ textMsg . WriteString ( * message .Name + " \n " )
147150 }
148151 }
152+
153+ if textMsg .Len () > 0 {
154+ tokenNum += GetTokenNum (tokenEncoder , textMsg .String ())
155+ }
156+
149157 tokenNum += 3 // Every reply is primed with <|start|>assistant<|message|>
150158 return tokenNum
151159}
@@ -187,6 +195,7 @@ func CountTokenInputMessages(input any, model string, preCostType int) int {
187195 return 0
188196 }
189197
198+ var textMsg strings.Builder
190199 var messages []types.ChatCompletionMessage
191200 err = json .Unmarshal (jsonStr , & messages )
192201 if err != nil {
@@ -198,13 +207,13 @@ func CountTokenInputMessages(input any, model string, preCostType int) int {
198207 tokenNum += tokensPerMessage
199208 switch v := message .Content .(type ) {
200209 case string :
201- tokenNum += GetTokenNum ( tokenEncoder , v )
210+ textMsg . WriteString ( v + " \n " )
202211 case []any :
203212 for _ , it := range v {
204213 m := it .(map [string ]any )
205214 switch m ["type" ] {
206215 case "text" :
207- tokenNum += GetTokenNum ( tokenEncoder , m ["text" ].(string ))
216+ textMsg . WriteString ( m ["text" ].(string ) + " \n " )
208217 case "image_url" :
209218 if preCostType == config .PreCostNotImage {
210219 continue
@@ -229,13 +238,17 @@ func CountTokenInputMessages(input any, model string, preCostType int) int {
229238 }
230239 }
231240 }
232- tokenNum += GetTokenNum ( tokenEncoder , message .Role )
241+ textMsg . WriteString ( message .Role + " \n " )
233242 if message .Name != nil {
234243 tokenNum += tokensPerName
235- tokenNum += GetTokenNum ( tokenEncoder , * message .Name )
244+ textMsg . WriteString ( * message .Name + " \n " )
236245 }
237246 }
238247
248+ if textMsg .Len () > 0 {
249+ tokenNum += GetTokenNum (tokenEncoder , textMsg .String ())
250+ }
251+
239252 tokenNum += 3 // Every reply is primed with <|start|>assistant<|message|>
240253 return tokenNum
241254}
@@ -247,19 +260,20 @@ func CountTokenRerankMessages(messages types.RerankRequest, model string, preCos
247260
248261 tokenEncoder := GetTokenEncoder (model )
249262 tokenNum := 0
263+ var textMsg strings.Builder
250264
251- tokenNum += GetTokenNum ( tokenEncoder , messages .Query )
265+ textMsg . WriteString ( messages .Query + " \n " )
252266
253267 for _ , document := range messages .Documents {
254268 docStr , ok := document .(string )
255269 if ok {
256- tokenNum += GetTokenNum ( tokenEncoder , docStr )
270+ textMsg . WriteString ( docStr + " \n " )
257271 } else {
258272 docMultimodal , ok := document .(map [string ]string )
259273 if ok {
260274 text := docMultimodal ["text" ]
261275 if text != "" {
262- tokenNum += GetTokenNum ( tokenEncoder , text )
276+ textMsg . WriteString ( text + " \n " )
263277 } else {
264278 // 意思意思加点
265279 tokenNum += 10
@@ -268,6 +282,10 @@ func CountTokenRerankMessages(messages types.RerankRequest, model string, preCos
268282 }
269283 }
270284
285+ if textMsg .Len () > 0 {
286+ tokenNum += GetTokenNum (tokenEncoder , textMsg .String ())
287+ }
288+
271289 return tokenNum
272290}
273291
0 commit comments