wangwei0 commited on
Commit
99f4cd1
1 Parent(s): 1e9f77d

Update main.py

Browse files
Files changed (1) hide show
  1. main.py +70 -26
main.py CHANGED
@@ -1,5 +1,5 @@
1
  import gevent.pywsgi
2
- from gevent import monkey;monkey.patch_all()
3
  from flask import Flask, request, Response, jsonify
4
  import argparse
5
  import requests
@@ -18,6 +18,7 @@ parser.add_argument("--port", type=int, help="Set the port.(default: 7860)", def
18
  args = parser.parse_args()
19
 
20
  base_url = os.getenv('MODEL_BASE_URL')
 
21
 
22
  @app.route('/api/v1/models', methods=["GET", "POST"])
23
  @app.route('/v1/models', methods=["GET", "POST"])
@@ -101,34 +102,78 @@ def chat_completions():
101
  "session_hash": session_hash,
102
  }
103
 
104
- def generate():
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
105
  response = requests.post(f"{base_url}/queue/join", json=json_prompt)
106
  url = f"{base_url}/queue/data?session_hash={session_hash}"
107
- data = requests.get(url, stream=True)
108
 
109
  time_now = int(time.time())
110
-
111
- for line in data.iter_lines():
112
- if line:
113
- decoded_line = line.decode("utf-8")
114
- json_line = json.loads(decoded_line[6:])
115
- if json_line["msg"] == "process_starts":
116
- res_data = gen_res_data({}, time_now=time_now, start=True)
117
- yield f"data: {json.dumps(res_data)}\n\n"
118
- elif json_line["msg"] == "process_generating":
119
- res_data = gen_res_data(json_line, time_now=time_now)
120
- yield f"data: {json.dumps(res_data)}\n\n"
121
- elif json_line["msg"] == "process_completed":
122
- yield "data: [DONE]"
123
-
124
- return Response(
125
- generate(),
126
- mimetype="text/event-stream",
127
- headers={
128
- "Access-Control-Allow-Origin": "*",
129
- "Access-Control-Allow-Headers": "*",
130
- },
131
- )
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
132
 
133
 
134
  def gen_res_data(data, time_now=0, start=False):
@@ -152,5 +197,4 @@ def gen_res_data(data, time_now=0, start=False):
152
 
153
 
154
  if __name__ == "__main__":
155
- # app.run(host=args.host, port=args.port, debug=True)
156
  gevent.pywsgi.WSGIServer((args.host, args.port), app).serve_forever()
 
1
  import gevent.pywsgi
2
+ from gevent import monkey; monkey.patch_all()
3
  from flask import Flask, request, Response, jsonify
4
  import argparse
5
  import requests
 
18
  args = parser.parse_args()
19
 
20
  base_url = os.getenv('MODEL_BASE_URL')
21
+ streaming_enabled = os.getenv('STREAMING_ENABLED', 'false').lower() == 'true'
22
 
23
  @app.route('/api/v1/models', methods=["GET", "POST"])
24
  @app.route('/v1/models', methods=["GET", "POST"])
 
102
  "session_hash": session_hash,
103
  }
104
 
105
+ if streaming_enabled:
106
+ def generate():
107
+ response = requests.post(f"{base_url}/queue/join", json=json_prompt)
108
+ url = f"{base_url}/queue/data?session_hash={session_hash}"
109
+ data = requests.get(url, stream=True)
110
+
111
+ time_now = int(time.time())
112
+
113
+ for line in data.iter_lines():
114
+ if line:
115
+ decoded_line = line.decode("utf-8")
116
+ json_line = json.loads(decoded_line[6:])
117
+ if json_line["msg"] == "process_starts":
118
+ res_data = gen_res_data({}, time_now=time_now, start=True)
119
+ yield f"data: {json.dumps(res_data)}\n\n"
120
+ elif json_line["msg"] == "process_generating":
121
+ res_data = gen_res_data(json_line, time_now=time_now)
122
+ yield f"data: {json.dumps(res_data)}\n\n"
123
+ elif json_line["msg"] == "process_completed":
124
+ yield "data: [DONE]"
125
+
126
+ return Response(
127
+ generate(),
128
+ mimetype="text/event-stream",
129
+ headers={
130
+ "Access-Control-Allow-Origin": "*",
131
+ "Access-Control-Allow-Headers": "*",
132
+ },
133
+ )
134
+ else:
135
  response = requests.post(f"{base_url}/queue/join", json=json_prompt)
136
  url = f"{base_url}/queue/data?session_hash={session_hash}"
137
+ data_stream = requests.get(url, stream=True)
138
 
139
  time_now = int(time.time())
140
+ collected_data = []
141
+
142
+ try:
143
+ for line in data_stream.iter_lines():
144
+ if line:
145
+ try:
146
+ decoded_line = line.decode("utf-8")
147
+ json_line = json.loads(decoded_line[6:]) # 确保这里的切片索引是正确的
148
+ collected_data.append(json_line)
149
+ if json_line.get("msg") == "process_completed":
150
+ break
151
+ except json.JSONDecodeError:
152
+ print("Error decoding JSON from response")
153
+ continue # 跳过不能解码的行
154
+
155
+ if not collected_data:
156
+ return jsonify({"error": "No data received from the server", "word_count": 0})
157
+
158
+ # 检查数据是否有效并尝试生成最终响应
159
+ try:
160
+ res_data = gen_res_data(collected_data[-1], time_now=time_now) if collected_data else {"error": "No valid data processed", "word_count": 0}
161
+ print("Response data:", res_data) # 打印输出res_data
162
+ except KeyError as e:
163
+ res_data = {"error": f"Missing key in data: {str(e)}", "word_count": 0}
164
+ print("KeyError:", res_data) # 错误情况下也打印res_data
165
+ except IndexError as e:
166
+ res_data = {"error": f"Index error in data: {str(e)}", "word_count": 0}
167
+ print("IndexError:", res_data)
168
+ except Exception as e:
169
+ res_data = {"error": f"An unexpected error occurred: {str(e)}", "word_count": 0}
170
+ print("Exception:", res_data)
171
+
172
+ except Exception as e:
173
+ res_data = {"error": f"An error occurred while processing stream: {str(e)}", "word_count": 0}
174
+ print("Stream processing exception:", res_data)
175
+
176
+ return jsonify(res_data)
177
 
178
 
179
  def gen_res_data(data, time_now=0, start=False):
 
197
 
198
 
199
  if __name__ == "__main__":
 
200
  gevent.pywsgi.WSGIServer((args.host, args.port), app).serve_forever()