Spaces:
Running
Running
Update main.py
Browse files
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 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
105 |
response = requests.post(f"{base_url}/queue/join", json=json_prompt)
|
106 |
url = f"{base_url}/queue/data?session_hash={session_hash}"
|
107 |
-
|
108 |
|
109 |
time_now = int(time.time())
|
110 |
-
|
111 |
-
|
112 |
-
|
113 |
-
|
114 |
-
|
115 |
-
|
116 |
-
|
117 |
-
|
118 |
-
|
119 |
-
|
120 |
-
|
121 |
-
|
122 |
-
|
123 |
-
|
124 |
-
|
125 |
-
|
126 |
-
|
127 |
-
|
128 |
-
|
129 |
-
|
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()
|