smgc commited on
Commit
da88775
1 Parent(s): 864722d

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +13 -18
app.py CHANGED
@@ -1,6 +1,7 @@
1
  import os
2
  import json
3
  import uuid
 
4
  from datetime import datetime
5
  from flask import Flask, request, Response, jsonify
6
  import socketio
@@ -76,10 +77,11 @@ def normalize_content(content):
76
 
77
  def calculate_tokens(text):
78
  """
79
- 使用字符数近似计算 token 数量。
80
- 这里假设平均每 4 个字符代表 1 个 token。
81
  """
82
- return len(text) // 4 # 近似每 4 个字符为 1 个 token
 
 
83
 
84
  @app.route('/')
85
  def root():
@@ -122,7 +124,7 @@ def messages():
122
 
123
  msg_id = str(uuid.uuid4())
124
  response_event = Event()
125
- response_text = [] # 用于存储输出的文本块
126
 
127
  if not stream:
128
  # 处理 stream 为 false 的情况
@@ -142,7 +144,7 @@ def messages():
142
  "model": model, # 动态模型
143
  "stop_reason": None,
144
  "stop_sequence": None,
145
- "usage": {"input_tokens": input_tokens, "output_tokens": 0}, # 动态 input_tokens
146
  },
147
  })
148
  yield create_event("content_block_start", {"type": "content_block_start", "index": 0, "content_block": {"type": "text", "text": ""}})
@@ -220,20 +222,15 @@ def messages():
220
  if sio.connected:
221
  sio.disconnect()
222
 
223
- # 合并所有的输出块
224
- output_text = ''.join(response_text)
225
- # 动态计算 output_tokens
226
- output_tokens = calculate_tokens(output_text)
227
 
228
- # 生成 content_block_stop 事件
229
  yield create_event("content_block_stop", {"type": "content_block_stop", "index": 0})
230
- # 生成 message_delta 事件,包含 output_tokens
231
  yield create_event("message_delta", {
232
  "type": "message_delta",
233
  "delta": {"stop_reason": "end_turn", "stop_sequence": None},
234
- "usage": {"output_tokens": output_tokens}, # 动态 output_tokens
235
  })
236
- # 生成 message_stop 事件
237
  yield create_event("message_stop", {"type": "message_stop"}) # 确保发送 message_stop 事件
238
 
239
  return Response(generate(), content_type='text/event-stream')
@@ -300,14 +297,12 @@ def handle_non_stream(previous_messages, msg_id, model, input_tokens):
300
  # 等待响应完成
301
  response_event.wait(timeout=30)
302
 
303
- # 合并所有的输出块
304
- output_text = ''.join(response_text)
305
- # 动态计算 output_tokens
306
- output_tokens = calculate_tokens(output_text)
307
 
308
  # 生成完整的响应
309
  full_response = {
310
- "content": [{"text": output_text, "type": "text"}], # 合并所有文本块
311
  "id": msg_id,
312
  "model": model, # 动态模型
313
  "role": "assistant",
 
1
  import os
2
  import json
3
  import uuid
4
+ import re
5
  from datetime import datetime
6
  from flask import Flask, request, Response, jsonify
7
  import socketio
 
77
 
78
  def calculate_tokens(text):
79
  """
80
+ 计算输入文本的 token 数量。我们通过正则表达式来进行 tokenization,确保标点符号和单词都被正确计算为 token。
 
81
  """
82
+ # 使用正则表达式匹配单词和标点符号
83
+ tokens = re.findall(r"\w+|[^\w\s]", text)
84
+ return len(tokens)
85
 
86
  @app.route('/')
87
  def root():
 
124
 
125
  msg_id = str(uuid.uuid4())
126
  response_event = Event()
127
+ response_text = []
128
 
129
  if not stream:
130
  # 处理 stream 为 false 的情况
 
144
  "model": model, # 动态模型
145
  "stop_reason": None,
146
  "stop_sequence": None,
147
+ "usage": {"input_tokens": input_tokens, "output_tokens": 0}, # 动态 input_tokens,output_tokens 初始化为 0
148
  },
149
  })
150
  yield create_event("content_block_start", {"type": "content_block_start", "index": 0, "content_block": {"type": "text", "text": ""}})
 
222
  if sio.connected:
223
  sio.disconnect()
224
 
225
+ # 计算输出 token 数量
226
+ output_tokens = calculate_tokens(''.join(response_text))
 
 
227
 
 
228
  yield create_event("content_block_stop", {"type": "content_block_stop", "index": 0})
 
229
  yield create_event("message_delta", {
230
  "type": "message_delta",
231
  "delta": {"stop_reason": "end_turn", "stop_sequence": None},
232
+ "usage": {"input_tokens": input_tokens, "output_tokens": output_tokens}, # 动态 output_tokens
233
  })
 
234
  yield create_event("message_stop", {"type": "message_stop"}) # 确保发送 message_stop 事件
235
 
236
  return Response(generate(), content_type='text/event-stream')
 
297
  # 等待响应完成
298
  response_event.wait(timeout=30)
299
 
300
+ # 计算输出 token 数量
301
+ output_tokens = calculate_tokens(''.join(response_text))
 
 
302
 
303
  # 生成完整的响应
304
  full_response = {
305
+ "content": [{"text": ''.join(response_text), "type": "text"}], # 合并所有文本块
306
  "id": msg_id,
307
  "model": model, # 动态模型
308
  "role": "assistant",